From 948023c9c900344aa1e2f334bcaae5a194873b0d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 10 Jun 2022 12:09:36 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_todo/gitlab/namespaced_class.yml | 4 - .rubocop_todo/layout/line_length.yml | 4 - .../layout/space_in_lambda_literal.yml | 1 - .rubocop_todo/rspec/context_wording.yml | 6 - .rubocop_todo/rspec/verified_doubles.yml | 3 - .rubocop_todo/style/open_struct_use.yml | 1 - .../stores/modules/batch_comments/actions.js | 16 +- app/assets/javascripts/issues/index.js | 2 + .../notes/components/notes_app.vue | 4 - .../javascripts/notes/stores/actions.js | 8 - .../javascripts/notes/stores/mutations.js | 14 -- .../pages/projects/incidents/show/index.js | 2 - .../javascripts/related_issues/constants.js | 11 + .../javascripts/related_issues/index.js | 3 +- .../work_items/components/update_work_item.js | 23 ++ .../components/work_item_detail.vue | 9 +- .../components/work_item_detail_modal.vue | 4 +- .../work_items/components/work_item_state.vue | 43 ++-- .../work_items/components/work_item_title.vue | 46 +++- .../update_work_item_task.mutation.graphql | 8 + .../pajamas/alert_component.html.haml | 2 +- app/components/pajamas/alert_component.rb | 3 +- app/controllers/concerns/notes_actions.rb | 42 +--- .../projects/merge_requests_controller.rb | 1 - app/graphql/types/release_asset_link_type.rb | 9 +- app/helpers/emails_helper.rb | 2 +- app/helpers/form_helper.rb | 42 +++- app/helpers/integrations_helper.rb | 4 +- app/helpers/notes_helper.rb | 6 +- .../clusters/integrations/prometheus.rb | 18 +- app/models/deployment.rb | 4 +- app/models/issue.rb | 2 +- app/models/note.rb | 1 - app/models/resource_event.rb | 1 - app/presenters/releases/link_presenter.rb | 12 + app/serializers/integrations/event_entity.rb | 46 ++++ .../integrations/event_serializer.rb | 7 + app/serializers/integrations/field_entity.rb | 49 ++++ .../integrations/field_serializer.rb | 7 + app/serializers/service_event_entity.rb | 44 ---- app/serializers/service_event_serializer.rb | 5 - app/serializers/service_field_entity.rb | 47 ---- app/serializers/service_field_serializer.rb | 5 - .../base_synthetic_notes_builder_service.rb | 9 +- .../projects/merge_requests/show.html.haml | 7 +- app/views/shared/deploy_keys/_form.html.haml | 2 +- app/views/shared/wikis/_form.html.haml | 2 +- app/workers/all_queues.yml | 18 ++ .../activate_integration_worker.rb | 25 ++ .../applications/activate_service_worker.rb | 23 +- .../deactivate_integration_worker.rb | 39 +++ .../applications/deactivate_service_worker.rb | 30 +-- .../concerns/limited_capacity/job_tracker.rb | 2 +- .../deployment_environment_manual_actions.yml | 8 - .../development/paginated_notes.yml | 8 - ...nd_secondary_stores_for_sidekiq_status.yml | 8 + ...ry_store_as_default_for_sidekiq_status.yml | 8 + config/initializers/7_redis.rb | 1 + ...grate_cluster_integration_worker_queues.rb | 17 ++ db/schema_migrations/20220525172001 | 1 + .../package_information/supported_os.md | 33 +-- doc/development/application_slis/index.md | 4 +- doc/update/index.md | 2 +- doc/user/admin_area/appearance.md | 4 +- lib/api/entities/releases/link.rb | 11 +- lib/gitlab/ci/config/entry/rules/rule.rb | 21 +- .../ci/config/entry/rules/rule/changes.rb | 23 ++ .../Security/Secure-Binaries.gitlab-ci.yml | 8 +- lib/gitlab/ci/trace/archive.rb | 4 +- lib/gitlab/metrics/sli.rb | 12 +- lib/gitlab/redis/duplicate_jobs.rb | 8 +- lib/gitlab/redis/multi_store.rb | 11 +- lib/gitlab/redis/sidekiq_status.rb | 24 ++ lib/gitlab/sidekiq_status.rb | 20 +- lib/gitlab/updated_notes_paginator.rb | 74 ------ locale/gitlab.pot | 15 ++ .../file/file_with_unusual_name_spec.rb | 6 +- .../snippet/create_project_snippet_spec.rb | 6 +- .../pajamas/alert_component_spec.rb | 30 +++ .../projects/notes_controller_spec.rb | 94 ------- spec/factories/plan_limits.rb | 6 +- .../merge_request/batch_comments_spec.rb | 2 - .../user_suggests_changes_on_diff_spec.rb | 2 - .../components/work_item_detail_modal_spec.js | 12 +- .../components/work_item_state_spec.js | 9 - .../components/work_item_title_spec.js | 31 ++- .../work_items/pages/work_item_detail_spec.js | 14 -- .../work_items/pages/work_item_root_spec.js | 1 + spec/helpers/emails_helper_spec.rb | 20 +- spec/helpers/form_helper_spec.rb | 13 +- spec/helpers/notes_helper_spec.rb | 4 - .../config/entry/rules/rule/changes_spec.rb | 81 ++++++ .../gitlab/ci/config/entry/rules/rule_spec.rb | 10 +- .../ci/pipeline/quota/deployments_spec.rb | 3 +- spec/lib/gitlab/ci/trace/archive_spec.rb | 73 ++++-- spec/lib/gitlab/metrics/sli_spec.rb | 58 +++-- spec/lib/gitlab/redis/duplicate_jobs_spec.rb | 50 +++- spec/lib/gitlab/redis/multi_store_spec.rb | 39 ++- spec/lib/gitlab/redis/sidekiq_status_spec.rb | 68 +++++ spec/lib/gitlab/sidekiq_status_spec.rb | 233 ++++++++++-------- .../gitlab/updated_notes_paginator_spec.rb | 57 ----- .../clusters/integrations/prometheus_spec.rb | 38 ++- spec/models/deployment_spec.rb | 24 +- spec/models/issue_spec.rb | 32 ++- .../releases/link_presenter_spec.rb | 31 +++ .../event_entity_spec.rb} | 12 +- .../field_entity_spec.rb} | 32 ++- spec/support/matchers/exceed_query_limit.rb | 97 +++++--- ...rb => activate_integration_worker_spec.rb} | 21 +- ... => deactivate_integration_worker_spec.rb} | 31 ++- .../wait_for_uninstall_app_worker_spec.rb | 4 +- .../limited_capacity/job_tracker_spec.rb | 2 +- spec/workers/every_sidekiq_worker_spec.rb | 2 + 113 files changed, 1345 insertions(+), 956 deletions(-) create mode 100644 app/assets/javascripts/work_items/components/update_work_item.js create mode 100644 app/assets/javascripts/work_items/graphql/update_work_item_task.mutation.graphql create mode 100644 app/presenters/releases/link_presenter.rb create mode 100644 app/serializers/integrations/event_entity.rb create mode 100644 app/serializers/integrations/event_serializer.rb create mode 100644 app/serializers/integrations/field_entity.rb create mode 100644 app/serializers/integrations/field_serializer.rb delete mode 100644 app/serializers/service_event_entity.rb delete mode 100644 app/serializers/service_event_serializer.rb delete mode 100644 app/serializers/service_field_entity.rb delete mode 100644 app/serializers/service_field_serializer.rb create mode 100644 app/workers/clusters/applications/activate_integration_worker.rb create mode 100644 app/workers/clusters/applications/deactivate_integration_worker.rb delete mode 100644 config/feature_flags/development/deployment_environment_manual_actions.yml delete mode 100644 config/feature_flags/development/paginated_notes.yml create mode 100644 config/feature_flags/development/use_primary_and_secondary_stores_for_sidekiq_status.yml create mode 100644 config/feature_flags/development/use_primary_store_as_default_for_sidekiq_status.yml create mode 100644 db/post_migrate/20220525172001_migrate_cluster_integration_worker_queues.rb create mode 100644 db/schema_migrations/20220525172001 create mode 100644 lib/gitlab/ci/config/entry/rules/rule/changes.rb create mode 100644 lib/gitlab/redis/sidekiq_status.rb delete mode 100644 lib/gitlab/updated_notes_paginator.rb create mode 100644 spec/lib/gitlab/ci/config/entry/rules/rule/changes_spec.rb create mode 100644 spec/lib/gitlab/redis/sidekiq_status_spec.rb delete mode 100644 spec/lib/gitlab/updated_notes_paginator_spec.rb create mode 100644 spec/presenters/releases/link_presenter_spec.rb rename spec/serializers/{service_event_entity_spec.rb => integrations/event_entity_spec.rb} (74%) rename spec/serializers/{service_field_entity_spec.rb => integrations/field_entity_spec.rb} (72%) rename spec/workers/clusters/applications/{activate_service_worker_spec.rb => activate_integration_worker_spec.rb} (69%) rename spec/workers/clusters/applications/{deactivate_service_worker_spec.rb => deactivate_integration_worker_spec.rb} (66%) diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index 36348324bd0..0933d9e3b91 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -614,10 +614,6 @@ Gitlab/NamespacedClass: - 'app/serializers/route_entity.rb' - 'app/serializers/route_serializer.rb' - 'app/serializers/runner_entity.rb' - - 'app/serializers/service_event_entity.rb' - - 'app/serializers/service_event_serializer.rb' - - 'app/serializers/service_field_entity.rb' - - 'app/serializers/service_field_serializer.rb' - 'app/serializers/stage_entity.rb' - 'app/serializers/stage_serializer.rb' - 'app/serializers/suggestion_entity.rb' diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml index a8fd3dee6be..eeb5c7c20da 100644 --- a/.rubocop_todo/layout/line_length.yml +++ b/.rubocop_todo/layout/line_length.yml @@ -769,7 +769,6 @@ Layout/LineLength: - 'app/views/projects/merge_requests/index.atom.builder' - 'app/workers/analytics/usage_trends/counter_job_worker.rb' - 'app/workers/background_migration/single_database_worker.rb' - - 'app/workers/clusters/applications/deactivate_service_worker.rb' - 'app/workers/concerns/application_worker.rb' - 'app/workers/concerns/each_shard_worker.rb' - 'app/workers/concerns/limited_capacity/worker.rb' @@ -5895,7 +5894,6 @@ Layout/LineLength: - 'spec/serializers/paginated_diff_entity_spec.rb' - 'spec/serializers/pipeline_serializer_spec.rb' - 'spec/serializers/review_app_setup_entity_spec.rb' - - 'spec/serializers/service_field_entity_spec.rb' - 'spec/services/alert_management/alerts/update_service_spec.rb' - 'spec/services/alert_management/create_alert_issue_service_spec.rb' - 'spec/services/alert_management/http_integrations/create_service_spec.rb' @@ -6503,8 +6501,6 @@ Layout/LineLength: - 'spec/workers/ci/ref_delete_unlock_artifacts_worker_spec.rb' - 'spec/workers/ci/resource_groups/assign_resource_from_resource_group_worker_spec.rb' - 'spec/workers/cluster_wait_for_app_update_worker_spec.rb' - - 'spec/workers/clusters/applications/activate_service_worker_spec.rb' - - 'spec/workers/clusters/applications/deactivate_service_worker_spec.rb' - 'spec/workers/clusters/integrations/check_prometheus_health_worker_spec.rb' - 'spec/workers/concerns/application_worker_spec.rb' - 'spec/workers/concerns/project_import_options_spec.rb' diff --git a/.rubocop_todo/layout/space_in_lambda_literal.yml b/.rubocop_todo/layout/space_in_lambda_literal.yml index 2377553ccdb..e633f51209d 100644 --- a/.rubocop_todo/layout/space_in_lambda_literal.yml +++ b/.rubocop_todo/layout/space_in_lambda_literal.yml @@ -168,7 +168,6 @@ Layout/SpaceInLambdaLiteral: - 'app/serializers/review_app_setup_entity.rb' - 'app/serializers/rollout_status_entity.rb' - 'app/serializers/runner_entity.rb' - - 'app/serializers/service_event_entity.rb' - 'app/serializers/stage_entity.rb' - 'app/serializers/test_case_entity.rb' - 'app/serializers/test_suite_entity.rb' diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml index bc647dd0e79..3431152f5aa 100644 --- a/.rubocop_todo/rspec/context_wording.yml +++ b/.rubocop_todo/rspec/context_wording.yml @@ -824,7 +824,6 @@ RSpec/ContextWording: - 'ee/spec/serializers/member_user_entity_spec.rb' - 'ee/spec/serializers/merge_request_widget_entity_spec.rb' - 'ee/spec/serializers/project_mirror_entity_spec.rb' - - 'ee/spec/serializers/service_field_entity_spec.rb' - 'ee/spec/serializers/vulnerabilities/finding_entity_spec.rb' - 'ee/spec/services/alert_management/process_prometheus_alert_service_spec.rb' - 'ee/spec/services/analytics/cycle_analytics/consistency_check_service_spec.rb' @@ -3195,8 +3194,6 @@ RSpec/ContextWording: - 'spec/serializers/merge_request_widget_entity_spec.rb' - 'spec/serializers/paginated_diff_entity_spec.rb' - 'spec/serializers/pipeline_details_entity_spec.rb' - - 'spec/serializers/service_event_entity_spec.rb' - - 'spec/serializers/service_field_entity_spec.rb' - 'spec/serializers/stage_entity_spec.rb' - 'spec/serializers/user_serializer_spec.rb' - 'spec/services/access_token_validation_service_spec.rb' @@ -3874,9 +3871,6 @@ RSpec/ContextWording: - 'spec/workers/cleanup_container_repository_worker_spec.rb' - 'spec/workers/cluster_update_app_worker_spec.rb' - 'spec/workers/clusters/agents/delete_expired_events_worker_spec.rb' - - 'spec/workers/clusters/applications/activate_service_worker_spec.rb' - - 'spec/workers/clusters/applications/deactivate_service_worker_spec.rb' - - 'spec/workers/clusters/applications/wait_for_uninstall_app_worker_spec.rb' - 'spec/workers/concerns/application_worker_spec.rb' - 'spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb' - 'spec/workers/container_expiration_policy_worker_spec.rb' diff --git a/.rubocop_todo/rspec/verified_doubles.yml b/.rubocop_todo/rspec/verified_doubles.yml index cc50626d0d7..4d27e5eb61d 100644 --- a/.rubocop_todo/rspec/verified_doubles.yml +++ b/.rubocop_todo/rspec/verified_doubles.yml @@ -146,7 +146,6 @@ RSpec/VerifiedDoubles: - ee/spec/serializers/merge_request_poll_widget_entity_spec.rb - ee/spec/serializers/merge_request_sidebar_basic_entity_spec.rb - ee/spec/serializers/merge_request_widget_entity_spec.rb - - ee/spec/serializers/service_field_entity_spec.rb - ee/spec/serializers/test_reports_comparer_serializer_spec.rb - ee/spec/serializers/user_analytics_entity_spec.rb - ee/spec/serializers/vulnerabilities/feedback_entity_spec.rb @@ -959,8 +958,6 @@ RSpec/VerifiedDoubles: - spec/serializers/prometheus_alert_entity_spec.rb - spec/serializers/review_app_setup_entity_spec.rb - spec/serializers/runner_entity_spec.rb - - spec/serializers/service_event_entity_spec.rb - - spec/serializers/service_field_entity_spec.rb - spec/serializers/stage_entity_spec.rb - spec/serializers/suggestion_entity_spec.rb - spec/serializers/test_reports_comparer_serializer_spec.rb diff --git a/.rubocop_todo/style/open_struct_use.yml b/.rubocop_todo/style/open_struct_use.yml index 172023c8fc1..eb8d467ef9f 100644 --- a/.rubocop_todo/style/open_struct_use.yml +++ b/.rubocop_todo/style/open_struct_use.yml @@ -5,7 +5,6 @@ Style/OpenStructUse: - ee/spec/finders/template_finder_spec.rb - ee/spec/helpers/ee/blob_helper_spec.rb - ee/spec/lib/gitlab/auth/group_saml/failure_handler_spec.rb - - ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb - lib/gitlab/testing/request_inspector_middleware.rb - spec/factories/wiki_pages.rb - spec/helpers/application_settings_helper_spec.rb diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js index 4ee22918463..5e5191dc311 100644 --- a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js @@ -88,17 +88,11 @@ export const publishReview = ({ commit, dispatch, getters }) => { }; export const updateDiscussionsAfterPublish = async ({ dispatch, getters, rootGetters }) => { - if (window.gon?.features?.paginatedNotes) { - await dispatch('stopPolling', null, { root: true }); - await dispatch('fetchData', null, { root: true }); - await dispatch('restartPolling', null, { root: true }); - } else { - await dispatch( - 'fetchDiscussions', - { path: getters.getNotesData.discussionsPath }, - { root: true }, - ); - } + await dispatch( + 'fetchDiscussions', + { path: getters.getNotesData.discussionsPath }, + { root: true }, + ); dispatch('diffs/assignDiscussionsToDiff', rootGetters.discussionsStructuredByLineCode, { root: true, diff --git a/app/assets/javascripts/issues/index.js b/app/assets/javascripts/issues/index.js index bcd729785b3..1b5e2824879 100644 --- a/app/assets/javascripts/issues/index.js +++ b/app/assets/javascripts/issues/index.js @@ -9,6 +9,7 @@ import { IssueType } from '~/issues/constants'; import Issue from '~/issues/issue'; import { initTitleSuggestions, initTypePopover } from '~/issues/new'; import { initRelatedMergeRequests } from '~/issues/related_merge_requests'; +import initRelatedIssues from '~/related_issues'; import { initHeaderActions, initIncidentApp, @@ -58,6 +59,7 @@ export function initShow() { if (issueType === IssueType.Incident) { initIncidentApp(issuableData); initHeaderActions(store, IssueType.Incident); + initRelatedIssues(IssueType.Incident); } else { initIssueApp(issuableData, store); initHeaderActions(store); diff --git a/app/assets/javascripts/notes/components/notes_app.vue b/app/assets/javascripts/notes/components/notes_app.vue index 148a73100ee..754c2917182 100644 --- a/app/assets/javascripts/notes/components/notes_app.vue +++ b/app/assets/javascripts/notes/components/notes_app.vue @@ -210,10 +210,6 @@ export default { this.setFetchingState(true); - if (this.glFeatures.paginatedNotes) { - return this.initPolling(); - } - return this.fetchDiscussions(this.getFetchDiscussionsConfig()) .then(this.initPolling) .then(() => { diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index 0c49a522138..57bb9e295f9 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -19,7 +19,6 @@ import TaskList from '~/task_list'; import mrWidgetEventHub from '~/vue_merge_request_widget/event_hub'; import SidebarStore from '~/sidebar/stores/sidebar_store'; import * as constants from '../constants'; -import eventHub from '../event_hub'; import * as types from './mutation_types'; import * as utils from './utils'; @@ -499,13 +498,6 @@ const pollSuccessCallBack = async (resp, commit, state, getters, dispatch) => { return null; } - if (window.gon?.features?.paginatedNotes && !resp.more && state.isFetching) { - eventHub.$emit('fetchedNotesData'); - dispatch('setFetchingState', false); - dispatch('setNotesFetchedState', true); - dispatch('setLoadingState', false); - } - if (resp.notes?.length) { await dispatch('updateOrCreateNotes', resp.notes); dispatch('startTaskList'); diff --git a/app/assets/javascripts/notes/stores/mutations.js b/app/assets/javascripts/notes/stores/mutations.js index a5418a73dc0..39d0a46d6d0 100644 --- a/app/assets/javascripts/notes/stores/mutations.js +++ b/app/assets/javascripts/notes/stores/mutations.js @@ -32,20 +32,6 @@ export default { } } - if (window.gon?.features?.paginatedNotes && note.base_discussion) { - if (discussion.diff_file) { - discussion.file_hash = discussion.diff_file.file_hash; - - discussion.truncated_diff_lines = utils.prepareDiffLines( - discussion.truncated_diff_lines || [], - ); - } - - discussion.resolvable = note.resolvable; - discussion.expanded = note.base_discussion.expanded; - discussion.resolved = note.resolved; - } - // note.base_discussion = undefined; // No point keeping a reference to this delete note.base_discussion; discussion.notes = [note]; diff --git a/app/assets/javascripts/pages/projects/incidents/show/index.js b/app/assets/javascripts/pages/projects/incidents/show/index.js index b39f0d7e7a9..a83c4f1c0d2 100644 --- a/app/assets/javascripts/pages/projects/incidents/show/index.js +++ b/app/assets/javascripts/pages/projects/incidents/show/index.js @@ -1,9 +1,7 @@ import { initShow } from '~/issues'; -import initRelatedIssues from '~/related_issues'; import initSidebarBundle from '~/sidebar/sidebar_bundle'; import initWorkItemLinks from '~/work_items/components/work_item_links'; initShow(); initSidebarBundle(); -initRelatedIssues(); initWorkItemLinks(); diff --git a/app/assets/javascripts/related_issues/constants.js b/app/assets/javascripts/related_issues/constants.js index f911468d8f1..3516836952f 100644 --- a/app/assets/javascripts/related_issues/constants.js +++ b/app/assets/javascripts/related_issues/constants.js @@ -2,6 +2,7 @@ import { __, sprintf } from '~/locale'; export const issuableTypesMap = { ISSUE: 'issue', + INCIDENT: 'incident', EPIC: 'epic', MERGE_REQUEST: 'merge_request', }; @@ -25,6 +26,11 @@ export const autoCompleteTextMap = { { emphasisStart: '<', emphasisEnd: '>' }, false, ), + [issuableTypesMap.INCIDENT]: sprintf( + __(' or %{emphasisStart}#id%{emphasisEnd}'), + { emphasisStart: '<', emphasisEnd: '>' }, + false, + ), [issuableTypesMap.EPIC]: sprintf( __(' or %{emphasisStart}&epic id%{emphasisEnd}'), { emphasisStart: '<', emphasisEnd: '>' }, @@ -45,6 +51,7 @@ export const autoCompleteTextMap = { export const inputPlaceholderTextMap = { [issuableTypesMap.ISSUE]: __('Paste issue link'), + [issuableTypesMap.INCIDENT]: __('Paste link'), [issuableTypesMap.EPIC]: __('Paste epic link'), [issuableTypesMap.MERGE_REQUEST]: __('Enter merge request URLs'), }; @@ -88,6 +95,7 @@ export const addRelatedItemErrorMap = { */ export const issuableIconMap = { [issuableTypesMap.ISSUE]: 'issues', + [issuableTypesMap.INCIDENT]: 'issues', [issuableTypesMap.EPIC]: 'epic', }; @@ -107,6 +115,7 @@ export const PathIdSeparator = { export const issuablesBlockHeaderTextMap = { [issuableTypesMap.ISSUE]: __('Linked issues'), + [issuableTypesMap.INCIDENT]: __('Related incidents or issues'), [issuableTypesMap.EPIC]: __('Linked epics'), }; @@ -122,10 +131,12 @@ export const issuablesBlockAddButtonTextMap = { export const issuablesFormCategoryHeaderTextMap = { [issuableTypesMap.ISSUE]: __('The current issue'), + [issuableTypesMap.INCIDENT]: __('The current incident'), [issuableTypesMap.EPIC]: __('The current epic'), }; export const issuablesFormInputTextMap = { [issuableTypesMap.ISSUE]: __('the following issue(s)'), + [issuableTypesMap.INCIDENT]: __('the following incident(s) or issue(s)'), [issuableTypesMap.EPIC]: __('the following epic(s)'), }; diff --git a/app/assets/javascripts/related_issues/index.js b/app/assets/javascripts/related_issues/index.js index b61f1cf2470..655ec57bc3d 100644 --- a/app/assets/javascripts/related_issues/index.js +++ b/app/assets/javascripts/related_issues/index.js @@ -2,7 +2,7 @@ import Vue from 'vue'; import { parseBoolean } from '~/lib/utils/common_utils'; import RelatedIssuesRoot from './components/related_issues_root.vue'; -export default function initRelatedIssues() { +export default function initRelatedIssues(issueType = 'issue') { const relatedIssuesRootElement = document.querySelector('.js-related-issues-root'); if (relatedIssuesRootElement) { // eslint-disable-next-line no-new @@ -21,6 +21,7 @@ export default function initRelatedIssues() { showCategorizedIssues: parseBoolean( relatedIssuesRootElement.dataset.showCategorizedIssues, ), + issuableType: issueType, autoCompleteEpics: false, }, }), diff --git a/app/assets/javascripts/work_items/components/update_work_item.js b/app/assets/javascripts/work_items/components/update_work_item.js new file mode 100644 index 00000000000..fc395fa5be3 --- /dev/null +++ b/app/assets/javascripts/work_items/components/update_work_item.js @@ -0,0 +1,23 @@ +import updateWorkItemMutation from '../graphql/update_work_item.mutation.graphql'; +import updateWorkItemTaskMutation from '../graphql/update_work_item_task.mutation.graphql'; + +export function getUpdateWorkItemMutation({ input, workItemParentId }) { + let mutation = updateWorkItemMutation; + + const variables = { + input, + }; + + if (workItemParentId) { + mutation = updateWorkItemTaskMutation; + variables.input = { + id: workItemParentId, + taskData: input, + }; + } + + return { + mutation, + variables, + }; +} diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue index 82ef907bb70..02bd1cbb1e8 100644 --- a/app/assets/javascripts/work_items/components/work_item_detail.vue +++ b/app/assets/javascripts/work_items/components/work_item_detail.vue @@ -37,6 +37,11 @@ export default { required: false, default: null, }, + workItemParentId: { + type: String, + required: false, + default: null, + }, }, data() { return { @@ -115,9 +120,9 @@ export default { :work-item-id="workItem.id" :work-item-title="workItem.title" :work-item-type="workItemType" + :work-item-parent-id="workItemParentId" class="gl-mr-5" @error="error = $event" - @updated="$emit('workItemUpdated')" /> diff --git a/app/assets/javascripts/work_items/components/work_item_state.vue b/app/assets/javascripts/work_items/components/work_item_state.vue index 7e506ba748c..87f4a8822b1 100644 --- a/app/assets/javascripts/work_items/components/work_item_state.vue +++ b/app/assets/javascripts/work_items/components/work_item_state.vue @@ -9,7 +9,7 @@ import { STATE_EVENT_REOPEN, TRACKING_CATEGORY_SHOW, } from '../constants'; -import updateWorkItemMutation from '../graphql/update_work_item.mutation.graphql'; +import { getUpdateWorkItemMutation } from './update_work_item'; import ItemState from './item_state.vue'; export default { @@ -22,6 +22,11 @@ export default { type: Object, required: true, }, + workItemParentId: { + type: String, + required: false, + default: null, + }, }, data() { return { @@ -41,7 +46,7 @@ export default { }, }, methods: { - async updateWorkItemState(newState) { + updateWorkItemState(newState) { const stateEventMap = { [STATE_OPEN]: STATE_EVENT_REOPEN, [STATE_CLOSED]: STATE_EVENT_CLOSE, @@ -49,35 +54,39 @@ export default { const stateEvent = stateEventMap[newState]; - await this.updateWorkItem(stateEvent); + this.updateWorkItem(stateEvent); }, + async updateWorkItem(updatedState) { if (!updatedState) { return; } + const input = { + id: this.workItem.id, + stateEvent: updatedState, + }; + this.updateInProgress = true; try { this.track('updated_state'); - const { - data: { workItemUpdate }, - } = await this.$apollo.mutate({ - mutation: updateWorkItemMutation, - variables: { - input: { - id: this.workItem.id, - stateEvent: updatedState, - }, - }, + const { mutation, variables } = getUpdateWorkItemMutation({ + workItemParentId: this.workItemParentId, + input, }); - if (workItemUpdate?.errors?.length) { - throw new Error(workItemUpdate.errors[0]); - } + const { data } = await this.$apollo.mutate({ + mutation, + variables, + }); - this.$emit('updated'); + const errors = data.workItemUpdate?.errors; + + if (errors?.length) { + throw new Error(errors[0]); + } } catch (error) { this.$emit('error', i18n.updateError); Sentry.captureException(error); diff --git a/app/assets/javascripts/work_items/components/work_item_title.vue b/app/assets/javascripts/work_items/components/work_item_title.vue index cd5363d36c4..b4c13037038 100644 --- a/app/assets/javascripts/work_items/components/work_item_title.vue +++ b/app/assets/javascripts/work_items/components/work_item_title.vue @@ -1,7 +1,8 @@