diff options
Diffstat (limited to 'app/views/projects/issues')
-rw-r--r-- | app/views/projects/issues/_alert_moved_from_service_desk.html.haml | 10 | ||||
-rw-r--r-- | app/views/projects/issues/_by_email_description.html.haml | 4 | ||||
-rw-r--r-- | app/views/projects/issues/_design_management.html.haml | 38 | ||||
-rw-r--r-- | app/views/projects/issues/_discussion.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/_issue.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/_issues.html.haml | 21 | ||||
-rw-r--r-- | app/views/projects/issues/_nav_btns.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/_new_branch.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/_service_desk_info_content.html.haml | 39 | ||||
-rw-r--r-- | app/views/projects/issues/edit.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/export_csv/_modal.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/import_csv/_button.html.haml | 5 | ||||
-rw-r--r-- | app/views/projects/issues/index.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/issues/service_desk.html.haml | 21 | ||||
-rw-r--r-- | app/views/projects/issues/show.html.haml | 23 |
15 files changed, 133 insertions, 42 deletions
diff --git a/app/views/projects/issues/_alert_moved_from_service_desk.html.haml b/app/views/projects/issues/_alert_moved_from_service_desk.html.haml new file mode 100644 index 00000000000..a6f969f8b10 --- /dev/null +++ b/app/views/projects/issues/_alert_moved_from_service_desk.html.haml @@ -0,0 +1,10 @@ +- return unless show_moved_service_desk_issue_warning?(issue) +- service_desk_link_url = help_page_path('user/project/service_desk') +- service_desk_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: service_desk_link_url } + +.hide.gl-alert.gl-alert-warning.js-alert-moved-from-service-desk-warning.gl-mt-5{ role: 'alert' } + = sprite_icon('warning', size: 16, css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') + %button.js-close.gl-alert-dismiss{ type: 'button', 'aria-label' => _('Dismiss') } + = sprite_icon('close', size: 16, css_class: 'gl-icon') + .gl-alert-body.gl-mr-3 + = s_('This project does not have %{service_desk_link_start}Service Desk%{service_desk_link_end} enabled, so the user who created the issue will no longer receive email notifications about new activity.').html_safe % { service_desk_link_start: service_desk_link_start, service_desk_link_end: '</a>'.html_safe } diff --git a/app/views/projects/issues/_by_email_description.html.haml b/app/views/projects/issues/_by_email_description.html.haml index f2d58534903..0ff852352e1 100644 --- a/app/views/projects/issues/_by_email_description.html.haml +++ b/app/views/projects/issues/_by_email_description.html.haml @@ -1,6 +1,6 @@ The subject will be used as the title of the new issue, and the message will be the description. -= link_to 'Quick actions', help_page_path('user/project/quick_actions'), target: '_blank', tabindex: -1 += link_to 'Quick actions', help_page_path('user/project/quick_actions'), target: '_blank' and styling with -= link_to 'Markdown', help_page_path('user/markdown'), target: '_blank', tabindex: -1 += link_to 'Markdown', help_page_path('user/markdown'), target: '_blank' are supported. diff --git a/app/views/projects/issues/_design_management.html.haml b/app/views/projects/issues/_design_management.html.haml index 96f1dc0155c..045f032e6e7 100644 --- a/app/views/projects/issues/_design_management.html.haml +++ b/app/views/projects/issues/_design_management.html.haml @@ -1,15 +1,27 @@ - if @project.design_management_enabled? - .js-design-management{ data: { project_path: @project.full_path, issue_iid: @issue.iid, issue_path: project_issue_path(@project, @issue) } } + - if Feature.enabled?(:design_management_moved, @project, default_enabled: true) + .js-design-management-new{ data: { project_path: @project.full_path, issue_iid: @issue.iid, issue_path: project_issue_path(@project, @issue) } } + - else + .js-design-management{ data: { project_path: @project.full_path, issue_iid: @issue.iid, issue_path: project_issue_path(@project, @issue) } } - else - .mt-4 - .row.empty-state - .col-12 - .text-content - %h4.center - = _('The one place for your designs') - %p.center - - requirements_link_url = help_page_path('user/project/issues/design_management', anchor: 'requirements') - - requirements_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: requirements_link_url } - - support_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: support_url } - - link_end = '</a>'.html_safe - = s_("DesignManagement|To enable design management, you'll need to %{requirements_link_start}meet the requirements%{requirements_link_end}. If you need help, reach out to our %{support_link_start}support team%{support_link_end} for assistance.").html_safe % { requirements_link_start: requirements_link_start, requirements_link_end: link_end, support_link_start: support_link_start, support_link_end: link_end } + - if Feature.enabled?(:design_management_moved, @project, default_enabled: true) + .row.empty-state.design-dropzone-border.gl-mt-5 + .text-content.center.gl-font-weight-bold + - requirements_link_url = help_page_path('user/project/issues/design_management', anchor: 'requirements') + - requirements_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: requirements_link_url } + - support_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: support_url } + - link_end = '</a>'.html_safe + = s_("DesignManagement|To enable design management, you'll need to %{requirements_link_start}meet the requirements%{requirements_link_end}. If you need help, reach out to our %{support_link_start}support team%{support_link_end} for assistance.").html_safe % { requirements_link_start: requirements_link_start, requirements_link_end: link_end, support_link_start: support_link_start, support_link_end: link_end } + - else + .mt-4 + .row.empty-state + .col-12 + .text-content + %h4.center + = _('The one place for your designs') + %p.center + - requirements_link_url = help_page_path('user/project/issues/design_management', anchor: 'requirements') + - requirements_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: requirements_link_url } + - support_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: support_url } + - link_end = '</a>'.html_safe + = s_("DesignManagement|To enable design management, you'll need to %{requirements_link_start}meet the requirements%{requirements_link_end}. If you need help, reach out to our %{support_link_start}support team%{support_link_end} for assistance.").html_safe % { requirements_link_start: requirements_link_start, requirements_link_end: link_end, support_link_start: support_link_start, support_link_end: link_end } diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index 9c129fa9ecc..bcc74e8d1d9 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -7,7 +7,7 @@ %section.issuable-discussion.js-vue-notes-event #js-vue-notes{ data: { notes_data: notes_data(@issue).to_json, - noteable_data: serialize_issuable(@issue, with_blocking_issues: Feature.enabled?(:prevent_closing_blocked_issues, @issue.project)), + noteable_data: serialize_issuable(@issue, with_blocking_issues: true), noteable_type: 'Issue', target_type: 'issue', current_user_data: UserSerializer.new.represent(current_user, {only_path: true}, CurrentUserEntity).to_json } } diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index e325d585d0c..e7cd35497e8 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -47,7 +47,7 @@ .issuable-meta %ul.controls - - if issue.moved? + - if issue.closed? && issue.moved? %li.issuable-status = _('CLOSED (MOVED)') - elsif issue.closed? diff --git a/app/views/projects/issues/_issues.html.haml b/app/views/projects/issues/_issues.html.haml index 7d539c9d749..c0383c57e63 100644 --- a/app/views/projects/issues/_issues.html.haml +++ b/app/views/projects/issues/_issues.html.haml @@ -1,9 +1,14 @@ -- empty_state_path = local_assigns.fetch(:empty_state_path, 'shared/empty_states/issues') +- if Feature.enabled?(:vue_issuables_list, @project) + .js-issuables-list{ data: { endpoint: expose_url(api_v4_projects_issues_path(id: @project.id)), + 'can-bulk-edit': @can_bulk_update.to_json, + 'empty-svg-path': image_path('illustrations/issues.svg'), + 'sort-key': @sort } } +- else + - empty_state_path = local_assigns.fetch(:empty_state_path, 'shared/empty_states/issues') + %ul.content-list.issues-list.issuable-list{ class: ("manual-ordering" if @sort == 'relative_position') } + = render partial: "projects/issues/issue", collection: @issues + - if @issues.blank? + = render empty_state_path -%ul.content-list.issues-list.issuable-list{ class: ("manual-ordering" if @sort == 'relative_position') } - = render partial: "projects/issues/issue", collection: @issues - - if @issues.blank? - = render empty_state_path - -- if @issues.present? - = paginate @issues, theme: "gitlab", total_pages: @total_pages + - if @issues.present? + = paginate @issues, theme: "gitlab", total_pages: @total_pages diff --git a/app/views/projects/issues/_nav_btns.html.haml b/app/views/projects/issues/_nav_btns.html.haml index 71c9bb36936..cc6ca4aca4a 100644 --- a/app/views/projects/issues/_nav_btns.html.haml +++ b/app/views/projects/issues/_nav_btns.html.haml @@ -14,7 +14,7 @@ = render 'projects/issues/import_csv/button' - if @can_bulk_update - = button_tag _("Edit issues"), class: "btn btn-default append-right-10 js-bulk-update-toggle" + = button_tag _("Edit issues"), class: "btn btn-default gl-mr-3 js-bulk-update-toggle" - if show_new_issue_link?(@project) = link_to _("New issue"), new_project_issue_path(@project, issue: { assignee_id: finder.assignee.try(:id), diff --git a/app/views/projects/issues/_new_branch.html.haml b/app/views/projects/issues/_new_branch.html.haml index 73904354a12..9bbab925f6a 100644 --- a/app/views/projects/issues/_new_branch.html.haml +++ b/app/views/projects/issues/_new_branch.html.haml @@ -41,7 +41,7 @@ = _('Create branch') %li.divider.droplab-item-ignore - %li.droplab-item-ignore.gl-ml-3.gl-mr-3.prepend-top-16 + %li.droplab-item-ignore.gl-ml-3.gl-mr-3.gl-mt-5 - if can_create_confidential_merge_request? #js-forked-project{ data: { namespace_path: @project.namespace.full_path, project_path: @project.full_path, new_fork_path: new_project_fork_path(@project), help_page_path: help_page_path('user/project/merge_requests') } } .form-group diff --git a/app/views/projects/issues/_service_desk_info_content.html.haml b/app/views/projects/issues/_service_desk_info_content.html.haml new file mode 100644 index 00000000000..ddd8e545043 --- /dev/null +++ b/app/views/projects/issues/_service_desk_info_content.html.haml @@ -0,0 +1,39 @@ +- is_empty_state = @issues.blank? +- service_desk_enabled = @project.service_desk_enabled? + +- callout_selector = is_empty_state ? 'empty-state' : 'non-empty-state media' +- svg_path = !is_empty_state ? 'shared/empty_states/icons/service_desk_callout.svg' : 'shared/empty_states/icons/service_desk_empty_state.svg' +- can_edit_project_settings = can?(current_user, :admin_project, @project) +- title_text = _("Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab") + +- if Gitlab::ServiceDesk.supported? + %div{ class: "#{callout_selector}" } + .svg-content + = render svg_path + + %div{ class: is_empty_state ? "text-content" : "prepend-top-10 gl-ml-3" } + - if is_empty_state + %h4= title_text + - else + %h5= title_text + + - if can_edit_project_settings && service_desk_enabled + %p + = _("Have your users email") + %code= @project.service_desk_address + + %span= _("Those emails automatically become issues (with the comments becoming the email conversation) listed here.") + = link_to _('Read more'), help_page_path('user/project/service_desk') + + - if can_edit_project_settings && !service_desk_enabled + %div{ class: is_empty_state ? "text-center" : "prepend-top-10" } + = link_to _("Turn on Service Desk"), edit_project_path(@project), class: 'btn btn-success' +- else + .empty-state + .svg-content + = render 'shared/empty_states/icons/service_desk_setup.svg' + .text-content + %h4= _('Service Desk is enabled but not yet active') + %p + = _("You must set up incoming email before it becomes active.") + = link_to _('More information'), help_page_path('administration/incoming_email', anchor: 'set-it-up') diff --git a/app/views/projects/issues/edit.html.haml b/app/views/projects/issues/edit.html.haml index 1b7d878c38c..353ff9c1cc2 100644 --- a/app/views/projects/issues/edit.html.haml +++ b/app/views/projects/issues/edit.html.haml @@ -1,4 +1,4 @@ -- page_title "Edit", "#{@issue.title} (#{@issue.to_reference})", "Issues" +- page_title _("Edit"), "#{@issue.title} (#{@issue.to_reference})", _("Issues") %h3.page-title Edit Issue ##{@issue.iid} diff --git a/app/views/projects/issues/export_csv/_modal.html.haml b/app/views/projects/issues/export_csv/_modal.html.haml index 9fdeb901b56..342c3ba27bb 100644 --- a/app/views/projects/issues/export_csv/_modal.html.haml +++ b/app/views/projects/issues/export_csv/_modal.html.haml @@ -12,7 +12,7 @@ .modal-body .modal-subheader = icon('check', { class: 'checkmark' }) - %strong.prepend-left-10 + %strong.gl-ml-3 - issues_count = issuables_count_for_state(:issues, params[:state]) = n_('%d issue selected', '%d issues selected', issues_count) % issues_count .modal-text diff --git a/app/views/projects/issues/import_csv/_button.html.haml b/app/views/projects/issues/import_csv/_button.html.haml index 7119b22daef..ea8f53f7342 100644 --- a/app/views/projects/issues/import_csv/_button.html.haml +++ b/app/views/projects/issues/import_csv/_button.html.haml @@ -3,7 +3,7 @@ .dropdown.btn-group %button.btn.rounded-right.text-center{ class: ('has-tooltip' if type == :icon), title: (_('Import issues') if type == :icon), - data: { toggle: 'dropdown' }, 'aria-label' => _('Import issues'), 'aria-haspopup' => 'true', 'aria-expanded' => 'false' } + data: { toggle: 'dropdown', qa_selector: 'import_issues_button' }, 'aria-label' => _('Import issues'), 'aria-haspopup' => 'true', 'aria-expanded' => 'false' } - if type == :icon = sprite_icon('import') - else @@ -13,4 +13,5 @@ %button{ data: { toggle: 'modal', target: '.issues-import-modal' } } = _('Import CSV') - if can_edit - %li= link_to _('Import from Jira'), project_import_jira_path(@project) + %li{ data: { qa_selector: 'import_from_jira_link' } } + = link_to _('Import from Jira'), project_import_jira_path(@project) diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index 826a62e39d3..cfc423da57a 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -1,6 +1,6 @@ - @can_bulk_update = can?(current_user, :admin_issue, @project) -- page_title "Issues" +- page_title _("Issues") - new_issue_email = @project.new_issuable_address(current_user, 'issue') = content_for :meta_tags do diff --git a/app/views/projects/issues/service_desk.html.haml b/app/views/projects/issues/service_desk.html.haml new file mode 100644 index 00000000000..9b0b3ebc9e0 --- /dev/null +++ b/app/views/projects/issues/service_desk.html.haml @@ -0,0 +1,21 @@ +- @can_bulk_update = false + +- page_title _("Service Desk") + +- content_for :breadcrumbs_extra do + = render "projects/issues/nav_btns", show_export_button: false, show_rss_button: false + +- support_bot_attrs = UserSerializer.new.represent(User.support_bot).to_json + +%div{ class: "js-service-desk-issues service-desk-issues", data: { support_bot: support_bot_attrs } } + .top-area + = render 'shared/issuable/nav', type: :issues + .nav-controls.d-block.d-sm-none + = render "projects/issues/nav_btns", show_feed_buttons: false, show_import_button: false, show_export_button: false + + - if @issues.present? + = render 'shared/issuable/search_bar', type: :issues + = render 'service_desk_info_content' + + .issues-holder + = render 'projects/issues/issues', empty_state_path: 'service_desk_info_content' diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 4d24b510267..2a0dc5e30b9 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -11,7 +11,7 @@ - can_create_issue = show_new_issue_link?(@project) = render_if_exists "projects/issues/alert_blocked", issue: @issue, current_user: current_user -= render_if_exists "projects/issues/alert_moved_from_service_desk", issue: @issue += render "projects/issues/alert_moved_from_service_desk", issue: @issue .detail-page-header .detail-page-header-body @@ -24,14 +24,11 @@ %span.d-none.d-sm-block Open .issuable-meta - - if @issue.confidential - .issuable-warning-icon.inline= sprite_icon('eye-slash', size: 16, css_class: 'icon') - - if @issue.discussion_locked? - .issuable-warning-icon.inline= sprite_icon('lock', size: 16, css_class: 'icon') + #js-issuable-header-warnings = issuable_meta(@issue, @project, "Issue") %a.btn.btn-default.float-right.d-block.d-sm-none.gutter-toggle.issuable-gutter-toggle.js-sidebar-toggle{ href: "#" } - = icon('angle-double-left') + = sprite_icon('chevron-double-lg-left') .detail-page-header-actions.js-issuable-actions.js-issuable-buttons{ data: { "action": "close-reopen" } } .clearfix.issue-btn-group.dropdown @@ -77,6 +74,9 @@ - if @issue.sentry_issue.present? #js-sentry-error-stack-trace{ data: error_details_data(@project, @issue.sentry_issue.sentry_issue_identifier) } + - if Feature.enabled?(:design_management_moved, @project, default_enabled: true) + = render 'projects/issues/design_management' + = render_if_exists 'projects/issues/related_issues' #js-related-merge-requests{ data: { endpoint: expose_path(api_v4_projects_issues_related_merge_requests_path(id: @project.id, issue_iid: @issue.iid)), project_namespace: @project.namespace.path, project_path: @project.path } } @@ -86,14 +86,17 @@ -# This element is filled in using JavaScript. .content-block.emoji-block.emoji-block-sticky - .row - .col-md-12.col-lg-4.js-noteable-awards + .row.gl-m-0.gl-justify-content-space-between + .js-noteable-awards = render 'award_emoji/awards_block', awardable: @issue, inline: true - .col-md-12.col-lg-8.new-branch-col + .new-branch-col #js-vue-sort-issue-discussions #js-vue-discussion-filter{ data: { default_filter: current_user&.notes_filter_for(@issue), notes_filters: UserPreference.notes_filters.to_json } } = render 'new_branch' if show_new_branch_button? - = render 'projects/issues/tabs' + - if Feature.enabled?(:design_management_moved, @project, default_enabled: true) + = render 'projects/issues/discussion' + - else + = render 'projects/issues/tabs' = render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @issue.assignees |