From 87ea12cef89b15c0d4f71d4c08fcd5824ffdce4f Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Sat, 29 Jun 2024 00:23:49 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../add_context_commits_modal/index.js | 8 +- .../admin/broadcast_messages/index.js | 10 +- .../admin/users/components/actions/delete.vue | 3 +- .../actions/delete_with_contributions.vue | 3 +- .../components/alerts_settings_form.vue | 9 +- .../alerts_settings/utils/cache_updates.js | 5 +- .../analytics/cycle_analytics/index.js | 8 +- .../authentication/password/index.js | 11 +- .../stores/modules/batch_comments/getters.js | 20 +- .../behaviors/markdown/render_json_table.js | 4 +- .../boards/components/board_list.vue | 3 +- .../boards/components/board_list_header.vue | 3 +- app/assets/javascripts/ci/jobs_page/index.js | 9 +- .../dag/components/dag_graph.vue | 10 +- .../graph/components/graph_component.vue | 3 +- .../components/header/pipeline_status.vue | 10 +- .../legacy_job_item.vue | 3 +- .../ci/reports/components/issues_list.vue | 12 +- .../ci/runner/admin_runners/index.js | 8 +- .../runner/components/registration/utils.js | 5 +- .../ci/runner/group_runners/index.js | 9 +- .../clusters/agents/graphql/cache_update.js | 5 +- .../clusters_list/graphql/cache_update.js | 14 +- app/assets/javascripts/code_review/signals.js | 6 +- .../content_editor/extensions/attachment.js | 22 +- .../extensions/code_suggestion.js | 44 +-- .../content_editor/extensions/copy_paste.js | 100 +++--- .../content_editor/extensions/details.js | 10 +- .../content_editor/extensions/frontmatter.js | 16 +- .../content_editor/extensions/link.js | 8 +- .../content_editor/extensions/reference.js | 17 +- .../content_editor/extensions/table_header.js | 45 ++- .../extensions/table_of_contents.js | 5 +- .../services/serialization_helpers.js | 5 +- .../track_input_rules_and_shortcuts.js | 16 +- .../components/design_notes/design_note.vue | 9 +- .../javascripts/design_management/index.js | 10 +- .../diffs/components/diff_line_note_form.vue | 41 ++- .../diffs/components/diff_row_utils.js | 119 +++---- .../extensions/source_editor_markdown_ext.js | 8 +- .../emoji/support/unicode_support_map.js | 14 +- .../components/rollback_modal_manager.vue | 9 +- .../components/deployment_history.vue | 8 +- .../deployment_data_transformation_helper.js | 8 +- .../javascripts/error_tracking/details.js | 9 +- app/assets/javascripts/error_tracking/list.js | 9 +- .../filtered_search/dropdown_utils.js | 5 +- .../filtered_search_dropdown.js | 5 +- .../filtered_search_manager.js | 10 +- .../filtered_search_visual_tokens.js | 12 +- .../javascripts/gitlab_version_check/index.js | 7 +- .../javascripts/groups/init_groups_explore.js | 8 +- .../groups/init_invite_members_banner.js | 10 +- .../components/transfer_locations.vue | 12 +- .../ide/components/commit_sidebar/actions.vue | 5 +- .../new_merge_request_option.vue | 5 +- .../javascripts/ide/lib/languages/hcl.js | 3 +- .../oauth_callback_domain_mismatch_error.js | 5 +- .../import_projects/store/actions.js | 307 +++++++++--------- .../gitlab_slack_application/index.js | 10 +- .../init_import_project_members_modal.js | 9 +- .../components/related_merge_requests.vue | 5 +- .../components/sign_in_oauth_button.vue | 6 +- .../components/workload_details_item.vue | 3 +- .../datetime/date_calculation_utility.js | 6 +- app/assets/javascripts/lib/utils/regexp.js | 3 +- .../javascripts/lib/utils/text_markdown.js | 3 +- .../javascripts/lib/utils/text_utility.js | 6 +- app/assets/javascripts/members/utils.js | 28 +- .../merge_conflicts/merge_conflicts_bundle.js | 8 +- .../merge_conflicts/store/getters.js | 8 +- .../components/merge_requests_list_app.vue | 8 +- .../components/lock_popovers.vue | 7 +- .../notes/mixins/discussion_navigation.js | 5 +- .../javascripts/notes/stores/getters.js | 48 +-- .../organizations/activity/index.js | 7 +- .../groups_and_projects/index.js | 2 + .../organizations/projects/edit/index.js | 9 +- .../organizations/settings/general/index.js | 8 +- .../shared/components/groups_view.vue | 7 +- .../javascripts/organizations/show/index.js | 2 + .../dependency_proxy/index.js | 10 +- .../group/graphql/utils/cache_update.js | 60 ++-- .../project/graphql/utils/cache_update.js | 36 +- .../pages/projects/branches/index/index.js | 5 +- .../pages/projects/graphs/charts/index.js | 9 +- .../services/performance_bar_service.js | 10 +- .../javascripts/projects/explore/index.js | 8 +- .../branch_rules/mount_branch_rules.js | 9 +- .../javascripts/projects/upload_file.js | 9 +- .../prometheus_metrics/custom_metrics.js | 10 +- .../related_issues/components/issue_token.vue | 12 +- .../stores/modules/edit_new/actions.js | 16 +- app/assets/javascripts/repository/index.js | 9 +- app/assets/javascripts/search/index.js | 9 +- .../graphql/cache_utils.js | 44 +-- .../sidebar/mount_milestone_sidebar.js | 10 +- .../javascripts/sidebar/mount_sidebar.js | 11 +- .../super_sidebar/super_sidebar_bundle.js | 19 +- .../users/profile/actions/index.js | 9 +- .../validators/length_validator.js | 9 +- .../components/state_container.vue | 3 +- .../extensions/issues.js | 3 +- .../extensions/test_report/index.vue | 5 +- .../vue_shared/alert_details/index.js | 5 +- .../markdown_drawer.stories.js | 42 +-- .../components/metric_images/store/actions.js | 122 +++---- .../vue_shared/directives/validation.js | 44 +-- .../components/notes/work_item_add_note.vue | 4 +- .../organizations/organization_helper.rb | 1 + app/services/upload_service.rb | 5 +- .../events/view_admin_push_rule_pageload.yml | 16 + ..._view_admin_push_rule_pageload_monthly.yml | 22 ++ ..._view_admin_push_rule_pageload_monthly.yml | 21 ++ ...m_view_admin_push_rule_pageload_weekly.yml | 22 ++ ...l_view_admin_push_rule_pageload_weekly.yml | 21 ++ doc/development/database/database_lab.md | 4 +- doc/security/token_overview.md | 99 +++--- doc/update/versions/gitlab_16_changes.md | 2 +- doc/update/versions/gitlab_17_changes.md | 2 +- doc/user/index.md | 8 +- lib/api/api.rb | 1 + lib/api/markdown_uploads.rb | 42 +++ lib/api/projects.rb | 58 ---- locale/gitlab.pot | 8 +- package.json | 3 +- scripts/frontend/clean_css_assets.mjs | 2 +- scripts/frontend/create_jsconfig.js | 4 +- scripts/frontend/tailwind_all_the_way.mjs | 2 +- .../alerts_settings_wrapper_spec.js | 3 +- .../components/mocks/apollo_mock.js | 21 +- spec/frontend/api_spec.js | 3 +- .../components/board_filtered_search_spec.js | 3 +- .../captcha_modal_axios_interceptor_spec.js | 6 +- spec/frontend/ci/job_details/utils_spec.js | 6 +- spec/frontend/ci/jobs_mock_data.js | 6 +- .../pipeline_config_reference_card_spec.js | 8 +- spec/frontend/ci/pipeline_editor/mock_data.js | 19 +- .../components/codequality_issue_body_spec.js | 3 +- .../reports/codequality_report/mock_data.js | 3 +- .../components/runner_update_form_spec.js | 11 +- spec/frontend/content_editor/test_utils.js | 5 +- spec/frontend/contribution_events/utils.js | 30 +- spec/frontend/crm/crm_form_spec.js | 5 +- .../components/new_deploy_token_spec.js | 9 +- .../components/diff_expansion_cell_spec.js | 5 +- .../graphql/resolvers/k8s_logs_spec.js | 7 +- .../environments/new_environment_item_spec.js | 3 +- .../components/error_details_info_spec.js | 5 +- spec/frontend/gfm_auto_complete_spec.js | 3 +- .../ide/components/branches/item_spec.js | 5 +- .../commit_sidebar/message_field_spec.js | 9 +- .../image_diff/replaced_image_diff_spec.js | 15 +- .../components/invite_modal_base_spec.js | 3 +- .../show/components/description_spec.js | 7 +- .../lib/apollo/persistence_mapper_spec.js | 149 ++++----- .../components/discussion_actions_spec.js | 34 +- spec/frontend/notes/mock_data.js | 12 +- .../shared/components/groups_view_spec.js | 31 +- .../dependency_proxy/app_spec.js | 5 +- .../group/components/package_settings_spec.js | 6 +- .../container_protection_rule_form_spec.js | 5 +- .../packages_protection_rule_form_spec.js | 5 +- .../forks/new/components/fork_form_spec.js | 115 ++++--- .../components/settings_panel_spec.js | 3 +- .../projects/pipelines/charts/mock_data.js | 93 +----- .../components/view/index_spec.js | 6 +- .../components/delete_blob_modal_spec.js | 34 +- .../components/new_directory_modal_spec.js | 9 +- .../components/tree_content_spec.js | 5 +- spec/frontend/repository/mock_data.js | 6 +- .../components/namespace_storage_app_spec.js | 6 +- .../storage/project/utils_spec.js | 6 +- .../mr_widget_security_reports_spec.js | 3 +- .../tokens/base_token_spec.js | 5 +- .../components/user_callout_dismisser_spec.js | 6 +- .../components/apollo_mocks.js | 21 +- .../components/manage_via_mr_spec.js | 5 +- .../notes/work_item_discussion_spec.js | 7 +- .../components/work_item_assignees_spec.js | 6 +- .../components/work_item_notes_spec.js | 14 +- spec/frontend/work_items/mock_data.js | 9 +- .../diffs/diffs_interopability_spec.js | 16 +- .../mock_server/routes/repository.js | 8 +- .../test_helpers/utils/obj_spec.js | 6 +- .../organizations/organization_helper_spec.rb | 13 +- spec/requests/api/markdown_uploads_spec.rb | 78 +++++ spec/requests/api/projects_spec.rb | 113 ------- spec/services/upload_service_spec.rb | 23 -- yarn.lock | 12 +- 190 files changed, 1553 insertions(+), 1715 deletions(-) create mode 100644 config/events/view_admin_push_rule_pageload.yml create mode 100644 config/metrics/counts_28d/count_distinct_user_id_from_view_admin_push_rule_pageload_monthly.yml create mode 100644 config/metrics/counts_28d/count_total_view_admin_push_rule_pageload_monthly.yml create mode 100644 config/metrics/counts_7d/count_distinct_user_id_from_view_admin_push_rule_pageload_weekly.yml create mode 100644 config/metrics/counts_7d/count_total_view_admin_push_rule_pageload_weekly.yml create mode 100644 lib/api/markdown_uploads.rb create mode 100644 spec/requests/api/markdown_uploads_spec.rb diff --git a/app/assets/javascripts/add_context_commits_modal/index.js b/app/assets/javascripts/add_context_commits_modal/index.js index 110677781a7..2cdb49eed45 100644 --- a/app/assets/javascripts/add_context_commits_modal/index.js +++ b/app/assets/javascripts/add_context_commits_modal/index.js @@ -38,12 +38,8 @@ export default function initAddContextCommitsTriggers() { el: addContextCommitsModalWrapperEl, store, data() { - const { - contextCommitsPath, - targetBranch, - mergeRequestIid, - projectId, - } = this.$options.el.dataset; + const { contextCommitsPath, targetBranch, mergeRequestIid, projectId } = + this.$options.el.dataset; return { contextCommitsPath, targetBranch, diff --git a/app/assets/javascripts/admin/broadcast_messages/index.js b/app/assets/javascripts/admin/broadcast_messages/index.js index 29021043b1a..e69a0bb827a 100644 --- a/app/assets/javascripts/admin/broadcast_messages/index.js +++ b/app/assets/javascripts/admin/broadcast_messages/index.js @@ -3,14 +3,8 @@ import BroadcastMessagesBase from './components/base.vue'; export default () => { const el = document.querySelector('#js-broadcast-messages'); - const { - page, - targetAccessLevelOptions, - messagesPath, - previewPath, - messagesCount, - messages, - } = el.dataset; + const { page, targetAccessLevelOptions, messagesPath, previewPath, messagesCount, messages } = + el.dataset; return new Vue({ el, diff --git a/app/assets/javascripts/admin/users/components/actions/delete.vue b/app/assets/javascripts/admin/users/components/actions/delete.vue index 455f35aa8c1..d280e1077f2 100644 --- a/app/assets/javascripts/admin/users/components/actions/delete.vue +++ b/app/assets/javascripts/admin/users/components/actions/delete.vue @@ -38,7 +38,8 @@ export default { i18n: { title: s__('AdminUsers|Delete User %{username}?'), primaryButtonLabel: s__('AdminUsers|Delete user'), - messageBody: s__(`AdminUsers|You are about to permanently delete the user %{username}. Issues, merge requests, + messageBody: + s__(`AdminUsers|You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide "Ghost-user". To avoid data loss, consider using the %{strongStart}block user%{strongEnd} feature instead. Once you %{strongStart}Delete user%{strongEnd}, it cannot be undone or recovered.`), diff --git a/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue b/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue index 24f0cac73f5..e97d041caf5 100644 --- a/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue +++ b/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue @@ -59,7 +59,8 @@ export default { i18n: { title: s__('AdminUsers|Delete User %{username} and contributions?'), primaryButtonLabel: s__('AdminUsers|Delete user and contributions'), - messageBody: s__(`AdminUsers|You are about to permanently delete the user %{username}. This will delete all issues, + messageBody: + s__(`AdminUsers|You are about to permanently delete the user %{username}. This will delete all issues, merge requests, groups, and projects linked to them. To avoid data loss, consider using the %{strongStart}Block user%{strongEnd} feature instead. After you %{strongStart}Delete user%{strongEnd}, you cannot undo this action or recover the data.`), diff --git a/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue b/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue index 144c04f6ff9..7d0017417eb 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue @@ -186,8 +186,13 @@ export default { ); }, isFormDirty() { - const { type, active, name, payloadAlertFields = [], payloadAttributeMappings = [] } = - this.currentIntegration || {}; + const { + type, + active, + name, + payloadAlertFields = [], + payloadAttributeMappings = [], + } = this.currentIntegration || {}; const { name: formName, active: formActive, type: formType } = this.integrationForm; const isDirty = diff --git a/app/assets/javascripts/alerts_settings/utils/cache_updates.js b/app/assets/javascripts/alerts_settings/utils/cache_updates.js index e03ebffd17a..4e64a67b6e7 100644 --- a/app/assets/javascripts/alerts_settings/utils/cache_updates.js +++ b/app/assets/javascripts/alerts_settings/utils/cache_updates.js @@ -15,9 +15,8 @@ const deleteIntegrationFromStore = (store, query, { httpIntegrationDestroy }, va }); const data = produce(sourceData, (draftData) => { - draftData.project.alertManagementIntegrations.nodes = draftData.project.alertManagementIntegrations.nodes.filter( - ({ id }) => id !== integration.id, - ); + draftData.project.alertManagementIntegrations.nodes = + draftData.project.alertManagementIntegrations.nodes.filter(({ id }) => id !== integration.id); }); store.writeQuery({ diff --git a/app/assets/javascripts/analytics/cycle_analytics/index.js b/app/assets/javascripts/analytics/cycle_analytics/index.js index 470d00c0d66..8b8bc51ef0f 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/index.js +++ b/app/assets/javascripts/analytics/cycle_analytics/index.js @@ -18,12 +18,8 @@ export default () => { const initialData = buildCycleAnalyticsInitialData({ ...el.dataset, gon }); const pagination = extractPaginationQueryParameters(window.location.search); - const { - selectedAuthor, - selectedMilestone, - selectedAssigneeList, - selectedLabelList, - } = extractFilterQueryParameters(window.location.search); + const { selectedAuthor, selectedMilestone, selectedAssigneeList, selectedLabelList } = + extractFilterQueryParameters(window.location.search); store.dispatch('initializeVsa', { ...initialData, diff --git a/app/assets/javascripts/authentication/password/index.js b/app/assets/javascripts/authentication/password/index.js index ee147e4eace..44921c82ebe 100644 --- a/app/assets/javascripts/authentication/password/index.js +++ b/app/assets/javascripts/authentication/password/index.js @@ -10,15 +10,8 @@ export const initPasswordInput = () => { const { form } = el; - const { - title, - id, - minimumPasswordLength, - testid, - trackActionForErrors, - autocomplete, - name, - } = el.dataset; + const { title, id, minimumPasswordLength, testid, trackActionForErrors, autocomplete, name } = + el.dataset; // eslint-disable-next-line no-new new Vue({ diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js index 28b9100c5f3..15106ffe0ff 100644 --- a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js @@ -65,16 +65,18 @@ export const shouldRenderDraftRowInDiscussion = (state, getters) => (discussionI export const draftForDiscussion = (state, getters) => (discussionId) => getters.draftsPerDiscussionId[discussionId] || {}; -export const draftsForLine = (state, getters) => (diffFileSha, line, side = null) => { - const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; - const key = side !== null ? parallelLineKey(line, side) : line.line_code; - const showDraftsForThisSide = showDraftOnSide(line, side); +export const draftsForLine = + (state, getters) => + (diffFileSha, line, side = null) => { + const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; + const key = side !== null ? parallelLineKey(line, side) : line.line_code; + const showDraftsForThisSide = showDraftOnSide(line, side); - if (showDraftsForThisSide && draftsForFile?.[key]) { - return draftsForFile[key].filter((d) => d.position.position_type === 'text'); - } - return []; -}; + if (showDraftsForThisSide && draftsForFile?.[key]) { + return draftsForFile[key].filter((d) => d.position.position_type === 'text'); + } + return []; + }; export const draftsForFile = (state) => (diffFileSha) => state.drafts.filter((draft) => draft.file_hash === diffFileSha); diff --git a/app/assets/javascripts/behaviors/markdown/render_json_table.js b/app/assets/javascripts/behaviors/markdown/render_json_table.js index aa0e7d38113..3bc497dc86f 100644 --- a/app/assets/javascripts/behaviors/markdown/render_json_table.js +++ b/app/assets/javascripts/behaviors/markdown/render_json_table.js @@ -4,8 +4,8 @@ import { __ } from '~/locale'; import { createAlert } from '~/alert'; // Async import component since we might not need it... -const JSONTable = memoize(() => - import(/* webpackChunkName: 'gfm_json_table' */ '../components/json_table.vue'), +const JSONTable = memoize( + () => import(/* webpackChunkName: 'gfm_json_table' */ '../components/json_table.vue'), ); const mountParseError = (element) => { diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index 7eda83d8707..490bc43dc8e 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -648,7 +648,8 @@ export default { :data-board="list.id" :data-board-type="list.listType" :class="{ - 'gl-bg-red-50 gl-rounded-bottom-left-base gl-rounded-bottom-right-base': boardItemsSizeExceedsMax, + 'gl-bg-red-50 gl-rounded-bottom-left-base gl-rounded-bottom-right-base': + boardItemsSizeExceedsMax, 'gl-overflow-hidden': disableScrollingWhenMutationInProgress, 'gl-overflow-y-auto': !disableScrollingWhenMutationInProgress, }" diff --git a/app/assets/javascripts/boards/components/board_list_header.vue b/app/assets/javascripts/boards/components/board_list_header.vue index 8c39e47c07d..9a5534a474c 100644 --- a/app/assets/javascripts/boards/components/board_list_header.vue +++ b/app/assets/javascripts/boards/components/board_list_header.vue @@ -330,7 +330,8 @@ export default { :class="{ 'gl-h-full': list.collapsed, 'gl-bg-gray-50': isSwimlanesHeader, - 'gl-border-t-solid gl-border-4 gl-rounded-top-left-base gl-rounded-top-right-base': isLabelList, + 'gl-border-t-solid gl-border-4 gl-rounded-top-left-base gl-rounded-top-right-base': + isLabelList, 'gl-bg-red-50 gl-rounded-top-left-base gl-rounded-top-right-base': boardItemsSizeExceedsMax, }" :style="headerStyle" diff --git a/app/assets/javascripts/ci/jobs_page/index.js b/app/assets/javascripts/ci/jobs_page/index.js index 7e99157289b..3bf7832b515 100644 --- a/app/assets/javascripts/ci/jobs_page/index.js +++ b/app/assets/javascripts/ci/jobs_page/index.js @@ -25,13 +25,8 @@ export default (containerId = 'js-jobs-table') => { return false; } - const { - fullPath, - jobStatuses, - pipelineEditorPath, - emptyStateSvgPath, - admin, - } = containerEl.dataset; + const { fullPath, jobStatuses, pipelineEditorPath, emptyStateSvgPath, admin } = + containerEl.dataset; return new Vue({ el: containerEl, diff --git a/app/assets/javascripts/ci/pipeline_details/dag/components/dag_graph.vue b/app/assets/javascripts/ci/pipeline_details/dag/components/dag_graph.vue index 94cfb1f138c..b81bdbf8da3 100644 --- a/app/assets/javascripts/ci/pipeline_details/dag/components/dag_graph.vue +++ b/app/assets/javascripts/ci/pipeline_details/dag/components/dag_graph.vue @@ -216,14 +216,8 @@ export default { }, drawGraph({ maxNodesPerLayer, linksAndNodes }) { - const { - baseWidth, - baseHeight, - minNodeHeight, - nodeWidth, - nodePadding, - paddingForLabels, - } = this.$options.viewOptions; + const { baseWidth, baseHeight, minNodeHeight, nodeWidth, nodePadding, paddingForLabels } = + this.$options.viewOptions; this.width = baseWidth; this.height = baseHeight + maxNodesPerLayer * minNodeHeight; diff --git a/app/assets/javascripts/ci/pipeline_details/graph/components/graph_component.vue b/app/assets/javascripts/ci/pipeline_details/graph/components/graph_component.vue index 2ee647fde67..e9bf0ed3762 100644 --- a/app/assets/javascripts/ci/pipeline_details/graph/components/graph_component.vue +++ b/app/assets/javascripts/ci/pipeline_details/graph/components/graph_component.vue @@ -180,7 +180,8 @@ export default { ref="mainPipelineContainer" class="pipeline-graph gl-display-flex gl-position-relative gl-whitespace-nowrap gl-rounded-lg" :class="{ - 'pipeline-graph-container gl-bg-gray-10 gl-pipeline-min-h gl-align-items-flex-start gl-pt-3 gl-pb-8 gl-mt-3 gl-overflow-auto': !isLinkedPipeline, + 'pipeline-graph-container gl-bg-gray-10 gl-pipeline-min-h gl-align-items-flex-start gl-pt-3 gl-pb-8 gl-mt-3 gl-overflow-auto': + !isLinkedPipeline, 'gl-bg-gray-50 gl-sm-ml-5': isLinkedPipeline, }" data-testid="pipeline-container" diff --git a/app/assets/javascripts/ci/pipeline_editor/components/header/pipeline_status.vue b/app/assets/javascripts/ci/pipeline_editor/components/header/pipeline_status.vue index e3df8e783b8..db9b360b66b 100644 --- a/app/assets/javascripts/ci/pipeline_editor/components/header/pipeline_status.vue +++ b/app/assets/javascripts/ci/pipeline_editor/components/header/pipeline_status.vue @@ -65,8 +65,14 @@ export default { }; }, update(data) { - const { id, iid, commit = {}, detailedStatus = {}, stages, status } = - data.project?.pipeline || {}; + const { + id, + iid, + commit = {}, + detailedStatus = {}, + stages, + status, + } = data.project?.pipeline || {}; return { id, diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/legacy_pipeline_mini_graph/legacy_job_item.vue b/app/assets/javascripts/ci/pipeline_mini_graph/legacy_pipeline_mini_graph/legacy_job_item.vue index 1e25c5de7ab..5b80504cd0b 100644 --- a/app/assets/javascripts/ci/pipeline_mini_graph/legacy_pipeline_mini_graph/legacy_job_item.vue +++ b/app/assets/javascripts/ci/pipeline_mini_graph/legacy_pipeline_mini_graph/legacy_job_item.vue @@ -172,7 +172,8 @@ export default { :class="[ cssClassJobName, { - 'gl-text-gray-900 gl-active-text-decoration-none gl-focus-text-decoration-none gl-hover-text-decoration-none': hasDetails, + 'gl-text-gray-900 gl-active-text-decoration-none gl-focus-text-decoration-none gl-hover-text-decoration-none': + hasDetails, 'js-job-component-tooltip non-details-job-component': !hasDetails, }, ]" diff --git a/app/assets/javascripts/ci/reports/components/issues_list.vue b/app/assets/javascripts/ci/reports/components/issues_list.vue index ababd4b5e49..7fc362c9ce6 100644 --- a/app/assets/javascripts/ci/reports/components/issues_list.vue +++ b/app/assets/javascripts/ci/reports/components/issues_list.vue @@ -3,11 +3,13 @@ import ReportItem from '~/ci/reports/components/report_item.vue'; import { STATUS_FAILED, STATUS_NEUTRAL, STATUS_SUCCESS } from '~/ci/reports/constants'; import SmartVirtualList from '~/vue_shared/components/smart_virtual_list.vue'; -const wrapIssueWithState = (status, isNew = false) => (issue) => ({ - status: issue.status || status, - isNew, - issue, -}); +const wrapIssueWithState = + (status, isNew = false) => + (issue) => ({ + status: issue.status || status, + isNew, + issue, + }); /** * Renders block of issues diff --git a/app/assets/javascripts/ci/runner/admin_runners/index.js b/app/assets/javascripts/ci/runner/admin_runners/index.js index 1e03e78487a..cf306090983 100644 --- a/app/assets/javascripts/ci/runner/admin_runners/index.js +++ b/app/assets/javascripts/ci/runner/admin_runners/index.js @@ -33,12 +33,8 @@ export const initAdminRunners = (selector = '#js-admin-runners') => { return null; } - const { - newRunnerPath, - allowRegistrationToken, - registrationToken, - tagSuggestionsPath, - } = el.dataset; + const { newRunnerPath, allowRegistrationToken, registrationToken, tagSuggestionsPath } = + el.dataset; const { cacheConfig, typeDefs, localMutations } = createLocalState(); const apolloProvider = new VueApollo({ diff --git a/app/assets/javascripts/ci/runner/components/registration/utils.js b/app/assets/javascripts/ci/runner/components/registration/utils.js index c1885be9585..6f9927a8ee0 100644 --- a/app/assets/javascripts/ci/runner/components/registration/utils.js +++ b/app/assets/javascripts/ci/runner/components/registration/utils.js @@ -109,8 +109,9 @@ export const platformArchitectures = ({ platform }) => { }; export const installScript = ({ platform, architecture }) => { - const downloadLocation = DOWNLOAD_LOCATIONS[platform].find(({ arch }) => arch === architecture) - .url; + const downloadLocation = DOWNLOAD_LOCATIONS[platform].find( + ({ arch }) => arch === architecture, + ).url; return importInstallScript({ platform }) .replace( diff --git a/app/assets/javascripts/ci/runner/group_runners/index.js b/app/assets/javascripts/ci/runner/group_runners/index.js index 49aa5db8462..db5239f6329 100644 --- a/app/assets/javascripts/ci/runner/group_runners/index.js +++ b/app/assets/javascripts/ci/runner/group_runners/index.js @@ -19,13 +19,8 @@ export const initGroupRunners = (selector = '#js-group-runners') => { return null; } - const { - allowRegistrationToken, - registrationToken, - newRunnerPath, - groupId, - groupFullPath, - } = el.dataset; + const { allowRegistrationToken, registrationToken, newRunnerPath, groupId, groupFullPath } = + el.dataset; const { cacheConfig, typeDefs, localMutations } = createLocalState(); diff --git a/app/assets/javascripts/clusters/agents/graphql/cache_update.js b/app/assets/javascripts/clusters/agents/graphql/cache_update.js index 8db79c82708..5a284814748 100644 --- a/app/assets/javascripts/clusters/agents/graphql/cache_update.js +++ b/app/assets/javascripts/clusters/agents/graphql/cache_update.js @@ -31,9 +31,8 @@ export function removeTokenFromStore(store, revokeToken, query, variables) { }); const data = produce(sourceData, (draftData) => { - draftData.project.clusterAgent.tokens.nodes = draftData.project.clusterAgent.tokens.nodes.filter( - ({ id }) => id !== revokeToken.id, - ); + draftData.project.clusterAgent.tokens.nodes = + draftData.project.clusterAgent.tokens.nodes.filter(({ id }) => id !== revokeToken.id); draftData.project.clusterAgent.tokens.count -= 1; }); diff --git a/app/assets/javascripts/clusters_list/graphql/cache_update.js b/app/assets/javascripts/clusters_list/graphql/cache_update.js index 1c58652744d..af9b8f2f6f0 100644 --- a/app/assets/javascripts/clusters_list/graphql/cache_update.js +++ b/app/assets/javascripts/clusters_list/graphql/cache_update.js @@ -44,12 +44,14 @@ export function removeAgentFromStore(store, deleteClusterAgent, query, variables draftData.project.clusterAgents.nodes = draftData.project.clusterAgents.nodes.filter( ({ id }) => id !== deleteClusterAgent.id, ); - draftData.project.ciAccessAuthorizedAgents.nodes = draftData.project.ciAccessAuthorizedAgents.nodes.filter( - ({ agent }) => agent.id !== deleteClusterAgent.id, - ); - draftData.project.userAccessAuthorizedAgents.nodes = draftData.project.userAccessAuthorizedAgents.nodes.filter( - ({ agent }) => agent.id !== deleteClusterAgent.id, - ); + draftData.project.ciAccessAuthorizedAgents.nodes = + draftData.project.ciAccessAuthorizedAgents.nodes.filter( + ({ agent }) => agent.id !== deleteClusterAgent.id, + ); + draftData.project.userAccessAuthorizedAgents.nodes = + draftData.project.userAccessAuthorizedAgents.nodes.filter( + ({ agent }) => agent.id !== deleteClusterAgent.id, + ); }); store.writeQuery({ diff --git a/app/assets/javascripts/code_review/signals.js b/app/assets/javascripts/code_review/signals.js index a9c71b0a77e..7d8ad63a4e1 100644 --- a/app/assets/javascripts/code_review/signals.js +++ b/app/assets/javascripts/code_review/signals.js @@ -13,7 +13,11 @@ function required(name) { } async function observeMergeRequestFinishingPreparation({ apollo, signaler }) { - const { namespace, project, id: iid } = getDerivedMergeRequestInformation({ + const { + namespace, + project, + id: iid, + } = getDerivedMergeRequestInformation({ endpoint: document.location.pathname, }); const projectPath = `${namespace}/${project}`; diff --git a/app/assets/javascripts/content_editor/extensions/attachment.js b/app/assets/javascripts/content_editor/extensions/attachment.js index e7a6af30266..70b2aa749ef 100644 --- a/app/assets/javascripts/content_editor/extensions/attachment.js +++ b/app/assets/javascripts/content_editor/extensions/attachment.js @@ -29,17 +29,19 @@ export default Extension.create({ addCommands() { return { - uploadAttachment: ({ file }) => () => { - const { uploadsPath, renderMarkdown, eventHub } = this.options; + uploadAttachment: + ({ file }) => + () => { + const { uploadsPath, renderMarkdown, eventHub } = this.options; - return handleFileEvent({ - file, - uploadsPath, - renderMarkdown, - editor: this.editor, - eventHub, - }); - }, + return handleFileEvent({ + file, + uploadsPath, + renderMarkdown, + editor: this.editor, + eventHub, + }); + }, }; }, addProseMirrorPlugins() { diff --git a/app/assets/javascripts/content_editor/extensions/code_suggestion.js b/app/assets/javascripts/content_editor/extensions/code_suggestion.js index 33e0dd13289..ab9201c9f90 100644 --- a/app/assets/javascripts/content_editor/extensions/code_suggestion.js +++ b/app/assets/javascripts/content_editor/extensions/code_suggestion.js @@ -34,32 +34,34 @@ export default CodeBlockHighlight.extend({ const ext = this; return { - insertCodeSuggestion: (attributes) => async ({ editor }) => { - // do not insert a new suggestion if already inside a suggestion - if (editor.isActive('codeSuggestion')) return false; + insertCodeSuggestion: + (attributes) => + async ({ editor }) => { + // do not insert a new suggestion if already inside a suggestion + if (editor.isActive('codeSuggestion')) return false; - const rawPath = ext.options.codeSuggestionsConfig.diffFile.view_path.replace( - '/blob/', - '/raw/', - ); - const allLines = (await memoizedGet(rawPath)).split('\n'); - const { line } = ext.options.codeSuggestionsConfig; - let { lines } = ext.options.codeSuggestionsConfig; + const rawPath = ext.options.codeSuggestionsConfig.diffFile.view_path.replace( + '/blob/', + '/raw/', + ); + const allLines = (await memoizedGet(rawPath)).split('\n'); + const { line } = ext.options.codeSuggestionsConfig; + let { lines } = ext.options.codeSuggestionsConfig; - if (!lines.length) lines = [line]; + if (!lines.length) lines = [line]; - const content = lines.map((l) => allLines[l.new_line - 1]).join('\n'); - const lineNumbers = `-${lines.length - 1}+0`; + const content = lines.map((l) => allLines[l.new_line - 1]).join('\n'); + const lineNumbers = `-${lines.length - 1}+0`; - editor.commands.insertContent({ - type: 'codeSuggestion', - attrs: { langParams: lineNumbers, ...attributes }, - // empty strings are not allowed in text nodes - content: [{ type: 'text', text: content || ' ' }], - }); + editor.commands.insertContent({ + type: 'codeSuggestion', + attrs: { langParams: lineNumbers, ...attributes }, + // empty strings are not allowed in text nodes + content: [{ type: 'text', text: content || ' ' }], + }); - return true; - }, + return true; + }, }; }, diff --git a/app/assets/javascripts/content_editor/extensions/copy_paste.js b/app/assets/javascripts/content_editor/extensions/copy_paste.js index 446e9197fa8..e60e68ee38d 100644 --- a/app/assets/javascripts/content_editor/extensions/copy_paste.js +++ b/app/assets/javascripts/content_editor/extensions/copy_paste.js @@ -43,62 +43,68 @@ export default Extension.create({ }, addCommands() { return { - pasteContent: (content = '', processMarkdown = true) => () => { - const { editor, options } = this; - const { renderMarkdown, eventHub } = options; - const deserializer = createMarkdownDeserializer({ render: renderMarkdown }); + pasteContent: + (content = '', processMarkdown = true) => + () => { + const { editor, options } = this; + const { renderMarkdown, eventHub } = options; + const deserializer = createMarkdownDeserializer({ render: renderMarkdown }); - const pasteSchemaSpec = { ...editor.schema.spec }; - pasteSchemaSpec.marks = OrderedMap.from(pasteSchemaSpec.marks).remove('span'); - pasteSchemaSpec.nodes = OrderedMap.from(pasteSchemaSpec.nodes).remove('div').remove('pre'); - const pasteSchema = new Schema(pasteSchemaSpec); + const pasteSchemaSpec = { ...editor.schema.spec }; + pasteSchemaSpec.marks = OrderedMap.from(pasteSchemaSpec.marks).remove('span'); + pasteSchemaSpec.nodes = OrderedMap.from(pasteSchemaSpec.nodes) + .remove('div') + .remove('pre'); + const pasteSchema = new Schema(pasteSchemaSpec); - const promise = processMarkdown - ? deserializer.deserialize({ schema: pasteSchema, markdown: content }) - : Promise.resolve(parseHTML(pasteSchema, content)); - const loaderId = uniqueId('loading'); + const promise = processMarkdown + ? deserializer.deserialize({ schema: pasteSchema, markdown: content }) + : Promise.resolve(parseHTML(pasteSchema, content)); + const loaderId = uniqueId('loading'); - Promise.resolve() - .then(() => { - editor - .chain() - .deleteSelection() - .setMeta(loadingPlugin, { - add: { loaderId, pos: editor.state.selection.from }, - }) - .run(); + Promise.resolve() + .then(() => { + editor + .chain() + .deleteSelection() + .setMeta(loadingPlugin, { + add: { loaderId, pos: editor.state.selection.from }, + }) + .run(); - return promise; - }) - .then(async ({ document }) => { - if (!document) return; + return promise; + }) + .then(async ({ document }) => { + if (!document) return; - const pos = findLoader(editor.state, loaderId); - if (!pos) return; + const pos = findLoader(editor.state, loaderId); + if (!pos) return; - const { firstChild, childCount } = document.content; - const toPaste = - childCount === 1 && firstChild.type.name === 'paragraph' - ? firstChild.content - : document.content; + const { firstChild, childCount } = document.content; + const toPaste = + childCount === 1 && firstChild.type.name === 'paragraph' + ? firstChild.content + : document.content; - editor - .chain() - .setMeta(loadingPlugin, { remove: { loaderId } }) - .insertContentAt(pos, toPaste.toJSON(), { - updateSelection: false, - }) - .run(); - }) - .catch(() => { - eventHub.$emit(ALERT_EVENT, { - message: __('An error occurred while pasting text in the editor. Please try again.'), - variant: VARIANT_DANGER, + editor + .chain() + .setMeta(loadingPlugin, { remove: { loaderId } }) + .insertContentAt(pos, toPaste.toJSON(), { + updateSelection: false, + }) + .run(); + }) + .catch(() => { + eventHub.$emit(ALERT_EVENT, { + message: __( + 'An error occurred while pasting text in the editor. Please try again.', + ), + variant: VARIANT_DANGER, + }); }); - }); - return true; - }, + return true; + }, }; }, addProseMirrorPlugins() { diff --git a/app/assets/javascripts/content_editor/extensions/details.js b/app/assets/javascripts/content_editor/extensions/details.js index 46c906d45b1..939fbd7a2e9 100644 --- a/app/assets/javascripts/content_editor/extensions/details.js +++ b/app/assets/javascripts/content_editor/extensions/details.js @@ -28,8 +28,14 @@ export default Node.create({ addCommands() { return { - setDetails: () => ({ commands }) => commands.wrapInList('details'), - toggleDetails: () => ({ commands }) => commands.toggleList('details', 'detailsContent'), + setDetails: + () => + ({ commands }) => + commands.wrapInList('details'), + toggleDetails: + () => + ({ commands }) => + commands.toggleList('details', 'detailsContent'), }; }, }); diff --git a/app/assets/javascripts/content_editor/extensions/frontmatter.js b/app/assets/javascripts/content_editor/extensions/frontmatter.js index 428171a9389..abe88f6e781 100644 --- a/app/assets/javascripts/content_editor/extensions/frontmatter.js +++ b/app/assets/javascripts/content_editor/extensions/frontmatter.js @@ -31,12 +31,16 @@ export default CodeBlockHighlight.extend({ }, addCommands() { return { - setFrontmatter: (attributes) => ({ commands }) => { - return commands.setNode(this.name, attributes); - }, - toggleFrontmatter: (attributes) => ({ commands }) => { - return commands.toggleNode(this.name, 'paragraph', attributes); - }, + setFrontmatter: + (attributes) => + ({ commands }) => { + return commands.setNode(this.name, attributes); + }, + toggleFrontmatter: + (attributes) => + ({ commands }) => { + return commands.toggleNode(this.name, 'paragraph', attributes); + }, }; }, diff --git a/app/assets/javascripts/content_editor/extensions/link.js b/app/assets/javascripts/content_editor/extensions/link.js index d70674f4f37..166db64eaa5 100644 --- a/app/assets/javascripts/content_editor/extensions/link.js +++ b/app/assets/javascripts/content_editor/extensions/link.js @@ -77,9 +77,11 @@ export default Link.extend({ addCommands() { return { ...this.parent?.(), - editLink: (attrs) => ({ chain }) => { - chain().setMeta('creatingLink', true).setLink(attrs).run(); - }, + editLink: + (attrs) => + ({ chain }) => { + chain().setMeta('creatingLink', true).setLink(attrs).run(); + }, }; }, diff --git a/app/assets/javascripts/content_editor/extensions/reference.js b/app/assets/javascripts/content_editor/extensions/reference.js index 0c385481ac5..f1601b99375 100644 --- a/app/assets/javascripts/content_editor/extensions/reference.js +++ b/app/assets/javascripts/content_editor/extensions/reference.js @@ -65,14 +65,18 @@ export default Node.create({ addCommands() { return { - insertQuickAction: () => ({ commands }) => commands.insertContent('

/

'), + insertQuickAction: + () => + ({ commands }) => + commands.insertContent('

/

'), }; }, addInputRules() { const { editor } = this; const { assetResolver } = this.options; - const referenceInputRegex = /(?:^|\s)([\w/]*([#!&%$@~]|\[vulnerability:)[\w.]+(\+?s?\]?))(?:\s|\n)/m; + const referenceInputRegex = + /(?:^|\s)([\w/]*([#!&%$@~]|\[vulnerability:)[\w.]+(\+?s?\]?))(?:\s|\n)/m; const referenceTypes = { '#': 'issue', '!': 'merge_request', @@ -95,13 +99,8 @@ export default Node.create({ const [, referenceId, referenceSymbol, expansionType] = match; const referenceType = referenceTypes[referenceSymbol]; - const { - href, - text, - expandedText, - fullyExpandedText, - backgroundColor, - } = await assetResolver.resolveReference(referenceId); + const { href, text, expandedText, fullyExpandedText, backgroundColor } = + await assetResolver.resolveReference(referenceId); if (!text) return; diff --git a/app/assets/javascripts/content_editor/extensions/table_header.js b/app/assets/javascripts/content_editor/extensions/table_header.js index ca2a0eb5cfd..b38dc824249 100644 --- a/app/assets/javascripts/content_editor/extensions/table_header.js +++ b/app/assets/javascripts/content_editor/extensions/table_header.js @@ -20,23 +20,36 @@ export default TableHeader.extend({ addCommands() { return { ...this.parent?.(), - alignColumn: (pos, align) => ({ commands }) => { - commands.selectColumn(pos); - commands.updateAttributes('tableHeader', { align }); - commands.updateAttributes('tableCell', { align }); - }, - alignColumnLeft: (pos) => ({ commands }) => commands.alignColumn(pos, 'left'), - alignColumnCenter: (pos) => ({ commands }) => commands.alignColumn(pos, 'center'), - alignColumnRight: (pos) => ({ commands }) => commands.alignColumn(pos, 'right'), - selectColumn: (pos) => ({ tr, dispatch }) => { - if (dispatch) { - const position = tr.doc.resolve(pos); - const colSelection = CellSelection.colSelection(position); - tr.setSelection(colSelection); - } + alignColumn: + (pos, align) => + ({ commands }) => { + commands.selectColumn(pos); + commands.updateAttributes('tableHeader', { align }); + commands.updateAttributes('tableCell', { align }); + }, + alignColumnLeft: + (pos) => + ({ commands }) => + commands.alignColumn(pos, 'left'), + alignColumnCenter: + (pos) => + ({ commands }) => + commands.alignColumn(pos, 'center'), + alignColumnRight: + (pos) => + ({ commands }) => + commands.alignColumn(pos, 'right'), + selectColumn: + (pos) => + ({ tr, dispatch }) => { + if (dispatch) { + const position = tr.doc.resolve(pos); + const colSelection = CellSelection.colSelection(position); + tr.setSelection(colSelection); + } - return true; - }, + return true; + }, }; }, diff --git a/app/assets/javascripts/content_editor/extensions/table_of_contents.js b/app/assets/javascripts/content_editor/extensions/table_of_contents.js index f64ed67199f..204426464ff 100644 --- a/app/assets/javascripts/content_editor/extensions/table_of_contents.js +++ b/app/assets/javascripts/content_editor/extensions/table_of_contents.js @@ -36,7 +36,10 @@ export default Node.create({ addCommands() { return { - insertTableOfContents: () => ({ commands }) => commands.insertContent({ type: this.name }), + insertTableOfContents: + () => + ({ commands }) => + commands.insertContent({ type: this.name }), }; }, diff --git a/app/assets/javascripts/content_editor/services/serialization_helpers.js b/app/assets/javascripts/content_editor/services/serialization_helpers.js index bfcbbca8037..710ea00fd1d 100644 --- a/app/assets/javascripts/content_editor/services/serialization_helpers.js +++ b/app/assets/javascripts/content_editor/services/serialization_helpers.js @@ -426,9 +426,8 @@ const expandPreserveUnchangedConfig = (configOrRender) => export function preserveUnchanged(configOrRender) { return (state, node, parent, index) => { - const { render, overwriteSourcePreservationStrategy, inline } = expandPreserveUnchangedConfig( - configOrRender, - ); + const { render, overwriteSourcePreservationStrategy, inline } = + expandPreserveUnchangedConfig(configOrRender); const { sourceMarkdown } = node.attrs; const same = state.options.changeTracker.get(node); diff --git a/app/assets/javascripts/content_editor/services/track_input_rules_and_shortcuts.js b/app/assets/javascripts/content_editor/services/track_input_rules_and_shortcuts.js index b844b414343..1167c6da480 100644 --- a/app/assets/javascripts/content_editor/services/track_input_rules_and_shortcuts.js +++ b/app/assets/javascripts/content_editor/services/track_input_rules_and_shortcuts.js @@ -8,13 +8,15 @@ import { INPUT_RULE_TRACKING_ACTION, } from '../constants'; -const trackKeyboardShortcut = (contentType, commandFn, shortcut) => (...args) => { - Tracking.event(undefined, KEYBOARD_SHORTCUT_TRACKING_ACTION, { - label: CONTENT_EDITOR_TRACKING_LABEL, - property: `${contentType}.${shortcut}`, - }); - return commandFn(...args); -}; +const trackKeyboardShortcut = + (contentType, commandFn, shortcut) => + (...args) => { + Tracking.event(undefined, KEYBOARD_SHORTCUT_TRACKING_ACTION, { + label: CONTENT_EDITOR_TRACKING_LABEL, + property: `${contentType}.${shortcut}`, + }); + return commandFn(...args); + }; const trackInputRule = (contentType, inputRule) => { return new InputRule({ diff --git a/app/assets/javascripts/design_management/components/design_notes/design_note.vue b/app/assets/javascripts/design_management/components/design_notes/design_note.vue index 41e537d2f9f..2b3e2874dfd 100644 --- a/app/assets/javascripts/design_management/components/design_notes/design_note.vue +++ b/app/assets/javascripts/design_management/components/design_notes/design_note.vue @@ -248,11 +248,10 @@ export default { const sourceData = cache.readQuery(query); const newData = produce(sourceData, (draftState) => { - const { - awardEmoji, - } = draftState.project.issue.designCollection.designs.nodes[0].discussions.nodes - .find((d) => d.id === this.note.discussion.id) - .notes.nodes.find((n) => n.id === this.note.id); + const { awardEmoji } = + draftState.project.issue.designCollection.designs.nodes[0].discussions.nodes + .find((d) => d.id === this.note.discussion.id) + .notes.nodes.find((n) => n.id === this.note.id); awardEmoji.nodes = this.getAwardEmojiNodes(name, toggledOn); }); diff --git a/app/assets/javascripts/design_management/index.js b/app/assets/javascripts/design_management/index.js index e4d3f1a3341..2251db7a5af 100644 --- a/app/assets/javascripts/design_management/index.js +++ b/app/assets/javascripts/design_management/index.js @@ -8,14 +8,8 @@ import createRouter from './router'; export default () => { const el = document.querySelector('.js-design-management'); - const { - issueIid, - projectPath, - issuePath, - registerPath, - signInPath, - newCommentTemplatePaths, - } = el.dataset; + const { issueIid, projectPath, issuePath, registerPath, signInPath, newCommentTemplatePaths } = + el.dataset; const router = createRouter(issuePath); apolloProvider.clients.defaultClient.cache.writeQuery({ diff --git a/app/assets/javascripts/diffs/components/diff_line_note_form.vue b/app/assets/javascripts/diffs/components/diff_line_note_form.vue index 287b2fc1973..4c2592ba7b4 100644 --- a/app/assets/javascripts/diffs/components/diff_line_note_form.vue +++ b/app/assets/javascripts/diffs/components/diff_line_note_form.vue @@ -191,30 +191,29 @@ export default { 'saveDiffDiscussion', 'setSuggestPopoverDismissed', ]), - handleCancelCommentForm: ignoreWhilePending(async function handleCancelCommentForm( - shouldConfirm, - isDirty, - ) { - if (shouldConfirm && isDirty) { - const msg = s__('Notes|Are you sure you want to cancel creating this comment?'); + handleCancelCommentForm: ignoreWhilePending( + async function handleCancelCommentForm(shouldConfirm, isDirty) { + if (shouldConfirm && isDirty) { + const msg = s__('Notes|Are you sure you want to cancel creating this comment?'); - const confirmed = await confirmAction(msg, { - primaryBtnText: __('Discard changes'), - cancelBtnText: __('Continue editing'), - }); + const confirmed = await confirmAction(msg, { + primaryBtnText: __('Discard changes'), + cancelBtnText: __('Continue editing'), + }); - if (!confirmed) { - return; + if (!confirmed) { + return; + } } - } - this.cancelCommentForm({ - lineCode: this.line.line_code, - fileHash: this.diffFileHash, - }); - nextTick(() => { - clearDraft(this.autosaveKey); - }); - }), + this.cancelCommentForm({ + lineCode: this.line.line_code, + fileHash: this.diffFileHash, + }); + nextTick(() => { + clearDraft(this.autosaveKey); + }); + }, + ), handleSaveNote(note, parentElement, errorCallback) { return this.saveDiffDiscussion({ note, formData: this.formData }) .then(() => this.handleCancelCommentForm()) diff --git a/app/assets/javascripts/diffs/components/diff_row_utils.js b/app/assets/javascripts/diffs/components/diff_row_utils.js index 6ae60449aea..059be9a0d36 100644 --- a/app/assets/javascripts/diffs/components/diff_row_utils.js +++ b/app/assets/javascripts/diffs/components/diff_row_utils.js @@ -153,67 +153,68 @@ export const shouldShowCommentButton = (hover, context, meta, discussions) => { return hover && !context && !meta && !discussions; }; -export const mapParallel = ({ - diffFile, - hasParallelDraftLeft, - hasParallelDraftRight, - draftsForLine, -}) => (line) => { - let { left, right } = line; +export const mapParallel = + ({ diffFile, hasParallelDraftLeft, hasParallelDraftRight, draftsForLine }) => + (line) => { + let { left, right } = line; - // Dicussions/Comments - const hasExpandedDiscussionOnLeft = - left?.discussions?.length > 0 ? left?.discussionsExpanded : false; - const hasExpandedDiscussionOnRight = - right?.discussions?.length > 0 ? right?.discussionsExpanded : false; + // Dicussions/Comments + const hasExpandedDiscussionOnLeft = + left?.discussions?.length > 0 ? left?.discussionsExpanded : false; + const hasExpandedDiscussionOnRight = + right?.discussions?.length > 0 ? right?.discussionsExpanded : false; - const renderCommentRow = - hasExpandedDiscussionOnLeft || hasExpandedDiscussionOnRight || left?.hasForm || right?.hasForm; + const renderCommentRow = + hasExpandedDiscussionOnLeft || + hasExpandedDiscussionOnRight || + left?.hasForm || + right?.hasForm; - if (left) { - left = { - ...left, - renderDiscussion: hasExpandedDiscussionOnLeft, - hasDraft: hasParallelDraftLeft(diffFile.file_hash, line), - lineDrafts: draftsForLine(diffFile.file_hash, line, 'left'), - hasCommentForm: left.hasForm, - isConflictMarker: - line.left.type === CONFLICT_MARKER_OUR || line.left.type === CONFLICT_MARKER_THEIR, - emptyCellClassMap: { conflict_our: line.right?.type === CONFLICT_THEIR }, - addCommentTooltip: addCommentTooltip(line.left), + if (left) { + left = { + ...left, + renderDiscussion: hasExpandedDiscussionOnLeft, + hasDraft: hasParallelDraftLeft(diffFile.file_hash, line), + lineDrafts: draftsForLine(diffFile.file_hash, line, 'left'), + hasCommentForm: left.hasForm, + isConflictMarker: + line.left.type === CONFLICT_MARKER_OUR || line.left.type === CONFLICT_MARKER_THEIR, + emptyCellClassMap: { conflict_our: line.right?.type === CONFLICT_THEIR }, + addCommentTooltip: addCommentTooltip(line.left), + }; + } + if (right) { + right = { + ...right, + renderDiscussion: Boolean( + hasExpandedDiscussionOnRight && right.type && right.type !== EXPANDED_LINE_TYPE, + ), + hasDraft: hasParallelDraftRight(diffFile.file_hash, line), + lineDrafts: draftsForLine(diffFile.file_hash, line, 'right'), + hasCommentForm: Boolean(right.hasForm && right.type && right.type !== EXPANDED_LINE_TYPE), + emptyCellClassMap: { conflict_their: line.left?.type === CONFLICT_OUR }, + addCommentTooltip: addCommentTooltip(line.right), + }; + } + + return { + ...line, + left, + right, + isMatchLineLeft: isMatchLine(left?.type), + isMatchLineRight: isMatchLine(right?.type), + isContextLineLeft: isContextLine(left?.type), + isContextLineRight: isContextLine(right?.type), + hasDiscussionsLeft: hasDiscussions(left), + hasDiscussionsRight: hasDiscussions(right), + lineHrefOld: lineHref(left, diffFile), + lineHrefNew: lineHref(right, diffFile), + lineCode: lineCode(line), + isMetaLineLeft: isMetaLine(left?.type), + isMetaLineRight: isMetaLine(right?.type), + draftRowClasses: left?.hasDraft || right?.hasDraft ? '' : 'js-temp-notes-holder', + renderCommentRow, + commentRowClasses: + hasDiscussions(left) || hasDiscussions(right) ? '' : 'js-temp-notes-holder', }; - } - if (right) { - right = { - ...right, - renderDiscussion: Boolean( - hasExpandedDiscussionOnRight && right.type && right.type !== EXPANDED_LINE_TYPE, - ), - hasDraft: hasParallelDraftRight(diffFile.file_hash, line), - lineDrafts: draftsForLine(diffFile.file_hash, line, 'right'), - hasCommentForm: Boolean(right.hasForm && right.type && right.type !== EXPANDED_LINE_TYPE), - emptyCellClassMap: { conflict_their: line.left?.type === CONFLICT_OUR }, - addCommentTooltip: addCommentTooltip(line.right), - }; - } - - return { - ...line, - left, - right, - isMatchLineLeft: isMatchLine(left?.type), - isMatchLineRight: isMatchLine(right?.type), - isContextLineLeft: isContextLine(left?.type), - isContextLineRight: isContextLine(right?.type), - hasDiscussionsLeft: hasDiscussions(left), - hasDiscussionsRight: hasDiscussions(right), - lineHrefOld: lineHref(left, diffFile), - lineHrefNew: lineHref(right, diffFile), - lineCode: lineCode(line), - isMetaLineLeft: isMetaLine(left?.type), - isMetaLineRight: isMetaLine(right?.type), - draftRowClasses: left?.hasDraft || right?.hasDraft ? '' : 'js-temp-notes-holder', - renderCommentRow, - commentRowClasses: hasDiscussions(left) || hasDiscussions(right) ? '' : 'js-temp-notes-holder', }; -}; diff --git a/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js b/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js index 0a5843ec631..5acb4f387bf 100644 --- a/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js +++ b/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js @@ -83,8 +83,12 @@ export class EditorMarkdownExtension { instance.setPosition(pos); }, insertMarkdown: (instance, e) => { - const { mdTag: tag, mdBlock: blockTag, mdPrepend, mdSelect: select } = - e.currentTarget?.dataset || e; + const { + mdTag: tag, + mdBlock: blockTag, + mdPrepend, + mdSelect: select, + } = e.currentTarget?.dataset || e; insertMarkdownText({ tag, diff --git a/app/assets/javascripts/emoji/support/unicode_support_map.js b/app/assets/javascripts/emoji/support/unicode_support_map.js index 9642993bd7d..efb16cf055c 100644 --- a/app/assets/javascripts/emoji/support/unicode_support_map.js +++ b/app/assets/javascripts/emoji/support/unicode_support_map.js @@ -76,8 +76,10 @@ const chromeVersion = chromeMatches && chromeMatches[1] && parseInt(chromeMatche const fontSize = 16; function generateUnicodeSupportMap(testMap) { const testMapKeys = Object.keys(testMap); - const numTestEntries = testMapKeys.reduce((list, testKey) => list.concat(testMap[testKey]), []) - .length; + const numTestEntries = testMapKeys.reduce( + (list, testKey) => list.concat(testMap[testKey]), + [], + ).length; const canvas = document.createElement('canvas'); (window.gl || window).testEmojiUnicodeSupportMapCanvas = canvas; @@ -106,8 +108,12 @@ function generateUnicodeSupportMap(testMap) { // keep the `readIndex` in sync from the writes by running all entries const isTestSatisfied = [].concat(testEntry).reduce((isSatisfied) => { // Sample along the vertical-middle for a couple of characters - const imageData = ctx.getImageData(0, readIndex * fontSize + fontSize / 2, 2 * fontSize, 1) - .data; + const imageData = ctx.getImageData( + 0, + readIndex * fontSize + fontSize / 2, + 2 * fontSize, + 1, + ).data; let isValidEmoji = false; for (let currentPixel = 0; currentPixel < 64; currentPixel += 1) { diff --git a/app/assets/javascripts/environments/components/rollback_modal_manager.vue b/app/assets/javascripts/environments/components/rollback_modal_manager.vue index 3a8b9ebcb84..3e66004859e 100644 --- a/app/assets/javascripts/environments/components/rollback_modal_manager.vue +++ b/app/assets/javascripts/environments/components/rollback_modal_manager.vue @@ -22,13 +22,8 @@ export default { document.querySelectorAll(this.selector).forEach((button) => { button.addEventListener('click', (e) => { e.preventDefault(); - const { - environmentName, - commitShortSha, - commitUrl, - isLastDeployment, - retryPath, - } = button.dataset; + const { environmentName, commitShortSha, commitUrl, isLastDeployment, retryPath } = + button.dataset; this.environment = { name: environmentName, diff --git a/app/assets/javascripts/environments/environment_details/components/deployment_history.vue b/app/assets/javascripts/environments/environment_details/components/deployment_history.vue index d2a05c5292d..5b533e6ab19 100644 --- a/app/assets/javascripts/environments/environment_details/components/deployment_history.vue +++ b/app/assets/javascripts/environments/environment_details/components/deployment_history.vue @@ -104,12 +104,8 @@ export default { try { // TLDR: when we load a page, if there's next and/or previous pages existing, we'll load their data as well to improve percepted performance. - const { - endCursor, - hasPreviousPage, - hasNextPage, - startCursor, - } = newProject.environment.deployments.pageInfo; + const { endCursor, hasPreviousPage, hasNextPage, startCursor } = + newProject.environment.deployments.pageInfo; // At the moment we have a limit of deployments being requested only from a signle environment entity per query, // and apparently two batched queries count as one on server-side diff --git a/app/assets/javascripts/environments/helpers/deployment_data_transformation_helper.js b/app/assets/javascripts/environments/helpers/deployment_data_transformation_helper.js index 3714d94443c..3b966a5412f 100644 --- a/app/assets/javascripts/environments/helpers/deployment_data_transformation_helper.js +++ b/app/assets/javascripts/environments/helpers/deployment_data_transformation_helper.js @@ -94,12 +94,10 @@ const getDeploymentApprovalFromDeploymentNode = (deploymentNode, environment) => const hasRequiredApprovals = protectedEnvironmentInfo.requiredApprovalCount > 0; const isApprovalActionAvailable = hasRequiredApprovals || hasApprovalRules; - const requiredMultipleApprovalRulesApprovals = protectedEnvironmentInfo.approvalRules.nodes.reduce( - (requiredApprovals, rule) => { + const requiredMultipleApprovalRulesApprovals = + protectedEnvironmentInfo.approvalRules.nodes.reduce((requiredApprovals, rule) => { return requiredApprovals + rule.requiredApprovals; - }, - 0, - ); + }, 0); const requiredApprovalCount = hasRequiredApprovals ? protectedEnvironmentInfo.requiredApprovalCount diff --git a/app/assets/javascripts/error_tracking/details.js b/app/assets/javascripts/error_tracking/details.js index 04bb50ab733..fb6876c841b 100644 --- a/app/assets/javascripts/error_tracking/details.js +++ b/app/assets/javascripts/error_tracking/details.js @@ -12,13 +12,8 @@ export default () => { const selector = '#js-error_details'; const domEl = document.querySelector(selector); - const { - issueId, - projectPath, - issueUpdatePath, - issueStackTracePath, - projectIssuesPath, - } = domEl.dataset; + const { issueId, projectPath, issueUpdatePath, issueStackTracePath, projectIssuesPath } = + domEl.dataset; let { integratedErrorTrackingEnabled } = domEl.dataset; integratedErrorTrackingEnabled = parseBoolean(integratedErrorTrackingEnabled); diff --git a/app/assets/javascripts/error_tracking/list.js b/app/assets/javascripts/error_tracking/list.js index 9805aed681d..3a2e5c90c1f 100644 --- a/app/assets/javascripts/error_tracking/list.js +++ b/app/assets/javascripts/error_tracking/list.js @@ -7,13 +7,8 @@ export default () => { const selector = '#js-error_tracking'; const domEl = document.querySelector(selector); - const { - indexPath, - enableErrorTrackingLink, - illustrationPath, - projectPath, - listPath, - } = domEl.dataset; + const { indexPath, enableErrorTrackingLink, illustrationPath, projectPath, listPath } = + domEl.dataset; let { errorTrackingEnabled, userCanEnableErrorTracking, diff --git a/app/assets/javascripts/filtered_search/dropdown_utils.js b/app/assets/javascripts/filtered_search/dropdown_utils.js index 38909db0555..62cbff9023b 100644 --- a/app/assets/javascripts/filtered_search/dropdown_utils.js +++ b/app/assets/javascripts/filtered_search/dropdown_utils.js @@ -163,9 +163,8 @@ export default class DropdownUtils { values.push(name.innerText); } } else if (token.classList.contains('input-token')) { - const { - isLastVisualTokenValid, - } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); + const { isLastVisualTokenValid } = + FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); const input = FilteredSearchContainer.container.querySelector('.filtered-search'); const inputValue = input && input.value; diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js index 9de291b7809..45304d8f7cb 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js @@ -35,9 +35,8 @@ export default class FilteredSearchDropdown { itemClicked(e, getValueFunction) { const { selected } = e.detail; if (selected.tagName === 'LI' && selected.innerHTML) { - const { - lastVisualToken: visualToken, - } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); + const { lastVisualToken: visualToken } = + FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); const { tokenOperator } = DropdownUtils.getVisualTokenValues(visualToken); const dataValueSet = DropdownUtils.setDataValueIfSelected( diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js b/app/assets/javascripts/filtered_search/filtered_search_manager.js index 5b39434c312..816d09a94f9 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js @@ -62,11 +62,8 @@ export default class FilteredSearchManager { this.placeholder = placeholder; this.anchor = anchor; - const { - multipleAssignees, - epicsEndpoint, - iterationsEndpoint, - } = this.filteredSearchInput.dataset; + const { multipleAssignees, epicsEndpoint, iterationsEndpoint } = + this.filteredSearchInput.dataset; if (multipleAssignees && this.filteredSearchTokenKeys.enableMultipleAssignees) { this.filteredSearchTokenKeys.enableMultipleAssignees(); @@ -546,7 +543,8 @@ export default class FilteredSearchManager { } } else { // Keep listening to token until we determine that the user is done typing the token value - const valueCompletedRegex = /([~%@]{0,1}".+")|([~%@]{0,1}'.+')|^((?![~%@]')(?![~%@]")(?!')(?!")).*/g; + const valueCompletedRegex = + /([~%@]{0,1}".+")|([~%@]{0,1}'.+')|^((?![~%@]')(?![~%@]")(?!')(?!")).*/g; if (searchToken.match(valueCompletedRegex) && input.value[input.value.length - 1] === ' ') { const tokenKey = FilteredSearchVisualTokens.getLastTokenPartial(); diff --git a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js index 390f38670c3..ad0a75d5566 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js +++ b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js @@ -156,10 +156,8 @@ export default class FilteredSearchVisualTokens { } static addValueToPreviousVisualTokenElement(value) { - const { - lastVisualToken, - isLastVisualTokenValid, - } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); + const { lastVisualToken, isLastVisualTokenValid } = + FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); if (!isLastVisualTokenValid && lastVisualToken.classList.contains('filtered-search-token')) { const name = FilteredSearchVisualTokens.getLastTokenPartial(); @@ -181,10 +179,8 @@ export default class FilteredSearchVisualTokens { tokenValue, { canEdit, uppercaseTokenName = false, capitalizeTokenValue = false } = {}, ) { - const { - lastVisualToken, - isLastVisualTokenValid, - } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); + const { lastVisualToken, isLastVisualTokenValid } = + FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); const { addVisualTokenElement } = FilteredSearchVisualTokens; if (isLastVisualTokenValid) { diff --git a/app/assets/javascripts/gitlab_version_check/index.js b/app/assets/javascripts/gitlab_version_check/index.js index abfef943b11..9a3193c0212 100644 --- a/app/assets/javascripts/gitlab_version_check/index.js +++ b/app/assets/javascripts/gitlab_version_check/index.js @@ -35,11 +35,8 @@ const mountSecurityPatchUpgradeAlertModal = (el) => { const { currentVersion, version } = el.dataset; try { - const { - details, - latestStableVersions, - latestStableVersionOfMinor, - } = convertObjectPropsToCamelCase(JSON.parse(version)); + const { details, latestStableVersions, latestStableVersionOfMinor } = + convertObjectPropsToCamelCase(JSON.parse(version)); return new Vue({ el, diff --git a/app/assets/javascripts/groups/init_groups_explore.js b/app/assets/javascripts/groups/init_groups_explore.js index ee45022312b..9a7457e8361 100644 --- a/app/assets/javascripts/groups/init_groups_explore.js +++ b/app/assets/javascripts/groups/init_groups_explore.js @@ -30,12 +30,8 @@ export const initGroupsExplore = () => { const { dataset: { appData }, } = el; - const { - groupsEmptyStateIllustration, - emptySearchIllustration, - endpoint, - initialSort, - } = convertObjectPropsToCamelCase(JSON.parse(appData)); + const { groupsEmptyStateIllustration, emptySearchIllustration, endpoint, initialSort } = + convertObjectPropsToCamelCase(JSON.parse(appData)); Vue.use(VueRouter); const router = createRouter(); diff --git a/app/assets/javascripts/groups/init_invite_members_banner.js b/app/assets/javascripts/groups/init_invite_members_banner.js index 38ab4122dab..81386d82e64 100644 --- a/app/assets/javascripts/groups/init_invite_members_banner.js +++ b/app/assets/javascripts/groups/init_invite_members_banner.js @@ -8,14 +8,8 @@ export default function initInviteMembersBanner() { return false; } - const { - svgPath, - inviteMembersPath, - trackLabel, - calloutsPath, - calloutsFeatureId, - groupId, - } = el.dataset; + const { svgPath, inviteMembersPath, trackLabel, calloutsPath, calloutsFeatureId, groupId } = + el.dataset; return new Vue({ el, diff --git a/app/assets/javascripts/groups_projects/components/transfer_locations.vue b/app/assets/javascripts/groups_projects/components/transfer_locations.vue index bce0a217deb..741764b2d25 100644 --- a/app/assets/javascripts/groups_projects/components/transfer_locations.vue +++ b/app/assets/javascripts/groups_projects/components/transfer_locations.vue @@ -144,13 +144,11 @@ export default { }, async getGroupTransferLocations() { try { - const { - data: groupTransferLocations, - headers, - } = await this.groupTransferLocationsApiMethod(this.resourceId, { - page: this.page, - search: this.searchTerm, - }); + const { data: groupTransferLocations, headers } = + await this.groupTransferLocationsApiMethod(this.resourceId, { + page: this.page, + search: this.searchTerm, + }); const { totalPages } = parseIntPagination(normalizeHeaders(headers)); this.totalPages = totalPages; diff --git a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue index 8765808cf0c..82e25d2a30d 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue @@ -12,9 +12,8 @@ import { import NewMergeRequestOption from './new_merge_request_option.vue'; import RadioGroup from './radio_group.vue'; -const { mapState: mapCommitState, mapActions: mapCommitActions } = createNamespacedHelpers( - 'commit', -); +const { mapState: mapCommitState, mapActions: mapCommitActions } = + createNamespacedHelpers('commit'); export default { components: { diff --git a/app/assets/javascripts/ide/components/commit_sidebar/new_merge_request_option.vue b/app/assets/javascripts/ide/components/commit_sidebar/new_merge_request_option.vue index 462dab3d1cf..f231d461104 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/new_merge_request_option.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/new_merge_request_option.vue @@ -4,9 +4,8 @@ import { GlTooltipDirective, GlFormCheckbox } from '@gitlab/ui'; import { createNamespacedHelpers } from 'vuex'; import { s__ } from '~/locale'; -const { mapActions: mapCommitActions, mapGetters: mapCommitGetters } = createNamespacedHelpers( - 'commit', -); +const { mapActions: mapCommitActions, mapGetters: mapCommitGetters } = + createNamespacedHelpers('commit'); export default { components: { GlFormCheckbox }, diff --git a/app/assets/javascripts/ide/lib/languages/hcl.js b/app/assets/javascripts/ide/lib/languages/hcl.js index bbb2ca66f33..78c9fea7ffe 100644 --- a/app/assets/javascripts/ide/lib/languages/hcl.js +++ b/app/assets/javascripts/ide/lib/languages/hcl.js @@ -77,7 +77,8 @@ const language = { symbols: /[=> { ); }; -const fetchReposFactory = ({ reposPath = isRequired() }) => ({ state, commit }) => { - commit(types.REQUEST_REPOS); +const fetchReposFactory = + ({ reposPath = isRequired() }) => + ({ state, commit }) => { + commit(types.REQUEST_REPOS); - const { provider, filter } = state; + const { provider, filter } = state; + + return axios + .get( + pathWithParams({ + path: reposPath, + ...filter, + ...paginationParams({ state }), + }), + ) + .then(({ data }) => { + const camelData = convertObjectPropsToCamelCase(data, { deep: true }); + commitPaginationData({ state, commit, data: camelData }); + commit(types.RECEIVE_REPOS_SUCCESS, camelData); + }) + .catch((e) => { + if (hasRedirectInError(e)) { + redirectToUrlInError(e); + } else if (tooManyRequests(e)) { + createAlert({ + message: sprintf( + s__('ImportProjects|%{provider} rate limit exceeded. Try again later'), + { + provider: capitalizeFirstCharacter(provider), + }, + ), + }); + + commit(types.RECEIVE_REPOS_ERROR); + } else { + createAlert({ + message: sprintf( + s__('ImportProjects|Requesting your %{provider} repositories failed'), + { + provider, + }, + ), + }); + + commit(types.RECEIVE_REPOS_ERROR); + } + }); + }; + +const fetchImportFactory = + (importPath = isRequired()) => + ({ state, commit, getters }, { repoId, optionalStages }) => { + const { ciCdOnly } = state; + const importTarget = getters.getImportTarget(repoId); + + commit(types.REQUEST_IMPORT, { repoId, importTarget }); + + const { newName, targetNamespace } = importTarget; + return axios + .post(importPath, { + repo_id: repoId, + ci_cd_only: ciCdOnly, + new_name: newName, + target_namespace: targetNamespace, + ...(Object.keys(optionalStages).length ? { optional_stages: optionalStages } : {}), + }) + .then(({ data }) => { + commit(types.RECEIVE_IMPORT_SUCCESS, { + importedProject: convertObjectPropsToCamelCase(data, { deep: true }), + repoId, + }); + }) + .catch((e) => { + const serverErrorMessage = e?.response?.data?.errors; + const alertMessage = serverErrorMessage + ? sprintf( + s__('ImportProjects|Importing the project failed: %{reason}'), + { + reason: serverErrorMessage, + }, + false, + ) + : s__('ImportProjects|Importing the project failed'); - return axios - .get( - pathWithParams({ - path: reposPath, - ...filter, - ...paginationParams({ state }), - }), - ) - .then(({ data }) => { - const camelData = convertObjectPropsToCamelCase(data, { deep: true }); - commitPaginationData({ state, commit, data: camelData }); - commit(types.RECEIVE_REPOS_SUCCESS, camelData); - }) - .catch((e) => { - if (hasRedirectInError(e)) { - redirectToUrlInError(e); - } else if (tooManyRequests(e)) { createAlert({ - message: sprintf(s__('ImportProjects|%{provider} rate limit exceeded. Try again later'), { - provider: capitalizeFirstCharacter(provider), - }), + message: alertMessage, }); - commit(types.RECEIVE_REPOS_ERROR); - } else { - createAlert({ - message: sprintf(s__('ImportProjects|Requesting your %{provider} repositories failed'), { - provider, - }), - }); - - commit(types.RECEIVE_REPOS_ERROR); - } - }); -}; - -const fetchImportFactory = (importPath = isRequired()) => ( - { state, commit, getters }, - { repoId, optionalStages }, -) => { - const { ciCdOnly } = state; - const importTarget = getters.getImportTarget(repoId); - - commit(types.REQUEST_IMPORT, { repoId, importTarget }); - - const { newName, targetNamespace } = importTarget; - return axios - .post(importPath, { - repo_id: repoId, - ci_cd_only: ciCdOnly, - new_name: newName, - target_namespace: targetNamespace, - ...(Object.keys(optionalStages).length ? { optional_stages: optionalStages } : {}), - }) - .then(({ data }) => { - commit(types.RECEIVE_IMPORT_SUCCESS, { - importedProject: convertObjectPropsToCamelCase(data, { deep: true }), - repoId, + commit(types.RECEIVE_IMPORT_ERROR, repoId); }); - }) - .catch((e) => { - const serverErrorMessage = e?.response?.data?.errors; - const alertMessage = serverErrorMessage - ? sprintf( - s__('ImportProjects|Importing the project failed: %{reason}'), - { - reason: serverErrorMessage, - }, - false, - ) - : s__('ImportProjects|Importing the project failed'); + }; - createAlert({ - message: alertMessage, - }); +export const cancelImportFactory = + (cancelImportPath) => + ({ state, commit }, { repoId }) => { + const existingRepo = state.repositories.find((r) => r.importSource.id === repoId); - commit(types.RECEIVE_IMPORT_ERROR, repoId); - }); -}; - -export const cancelImportFactory = (cancelImportPath) => ({ state, commit }, { repoId }) => { - const existingRepo = state.repositories.find((r) => r.importSource.id === repoId); - - if (!existingRepo?.importedProject) { - throw new Error(`Attempting to cancel project which is not started: ${repoId}`); - } - - const { id } = existingRepo.importedProject; - - return axios - .post(cancelImportPath, { - project_id: id, - }) - .then(() => { - commit(types.CANCEL_IMPORT_SUCCESS, { - repoId, - }); - }) - .catch((e) => { - const serverErrorMessage = e?.response?.data?.errors; - const alertMessage = serverErrorMessage - ? sprintf( - s__('ImportProjects|Cancelling project import failed: %{reason}'), - { - reason: serverErrorMessage, - }, - false, - ) - : s__('ImportProjects|Cancelling project import failed'); - - createAlert({ - message: alertMessage, - }); - }); -}; - -export const fetchJobsFactory = (jobsPath = isRequired()) => ({ state, commit, dispatch }) => { - if (eTagPoll) { - stopJobsPolling(); - clearJobsEtagPoll(); - } - - eTagPoll = new Poll({ - resource: { - fetchJobs: () => axios.get(pathWithParams({ path: jobsPath, ...state.filter })), - }, - method: 'fetchJobs', - successCallback: ({ data }) => - commit(types.RECEIVE_JOBS_SUCCESS, convertObjectPropsToCamelCase(data, { deep: true })), - errorCallback: (e) => { - if (hasRedirectInError(e)) { - redirectToUrlInError(e); - } else { - createAlert({ - message: s__('ImportProjects|Update of imported projects with realtime changes failed'), - }); - } - }, - }); - - if (!Visibility.hidden()) { - eTagPoll.makeRequest(); - } - - Visibility.change(() => { - if (!Visibility.hidden()) { - dispatch('restartJobsPolling'); - } else { - dispatch('stopJobsPolling'); + if (!existingRepo?.importedProject) { + throw new Error(`Attempting to cancel project which is not started: ${repoId}`); } - }); -}; + + const { id } = existingRepo.importedProject; + + return axios + .post(cancelImportPath, { + project_id: id, + }) + .then(() => { + commit(types.CANCEL_IMPORT_SUCCESS, { + repoId, + }); + }) + .catch((e) => { + const serverErrorMessage = e?.response?.data?.errors; + const alertMessage = serverErrorMessage + ? sprintf( + s__('ImportProjects|Cancelling project import failed: %{reason}'), + { + reason: serverErrorMessage, + }, + false, + ) + : s__('ImportProjects|Cancelling project import failed'); + + createAlert({ + message: alertMessage, + }); + }); + }; + +export const fetchJobsFactory = + (jobsPath = isRequired()) => + ({ state, commit, dispatch }) => { + if (eTagPoll) { + stopJobsPolling(); + clearJobsEtagPoll(); + } + + eTagPoll = new Poll({ + resource: { + fetchJobs: () => axios.get(pathWithParams({ path: jobsPath, ...state.filter })), + }, + method: 'fetchJobs', + successCallback: ({ data }) => + commit(types.RECEIVE_JOBS_SUCCESS, convertObjectPropsToCamelCase(data, { deep: true })), + errorCallback: (e) => { + if (hasRedirectInError(e)) { + redirectToUrlInError(e); + } else { + createAlert({ + message: s__('ImportProjects|Update of imported projects with realtime changes failed'), + }); + } + }, + }); + + if (!Visibility.hidden()) { + eTagPoll.makeRequest(); + } + + Visibility.change(() => { + if (!Visibility.hidden()) { + dispatch('restartJobsPolling'); + } else { + dispatch('stopJobsPolling'); + } + }); + }; const setFilter = ({ commit, dispatch }, filter) => { commit(types.SET_FILTER, filter); diff --git a/app/assets/javascripts/integrations/gitlab_slack_application/index.js b/app/assets/javascripts/integrations/gitlab_slack_application/index.js index 8bbb81df997..032641ea243 100644 --- a/app/assets/javascripts/integrations/gitlab_slack_application/index.js +++ b/app/assets/javascripts/integrations/gitlab_slack_application/index.js @@ -7,14 +7,8 @@ export default () => { if (!el) return null; - const { - projects, - isSignedIn, - signInPath, - slackLinkPath, - gitlabLogoPath, - slackLogoPath, - } = el.dataset; + const { projects, isSignedIn, signInPath, slackLinkPath, gitlabLogoPath, slackLogoPath } = + el.dataset; return new Vue({ el, diff --git a/app/assets/javascripts/invite_members/init_import_project_members_modal.js b/app/assets/javascripts/invite_members/init_import_project_members_modal.js index 18902d77dc5..57c8782a079 100644 --- a/app/assets/javascripts/invite_members/init_import_project_members_modal.js +++ b/app/assets/javascripts/invite_members/init_import_project_members_modal.js @@ -9,13 +9,8 @@ export default function initImportProjectMembersModal() { return false; } - const { - projectId, - projectName, - reloadPageOnSubmit, - usersLimitDataset, - addSeatsHref, - } = el.dataset; + const { projectId, projectName, reloadPageOnSubmit, usersLimitDataset, addSeatsHref } = + el.dataset; return new Vue({ el, diff --git a/app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue b/app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue index bcea921cd46..f78a2e9207d 100644 --- a/app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue +++ b/app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue @@ -36,9 +36,8 @@ export default { const prevMergeRequests = previousResult.project.issue.relatedMergeRequests.nodes; return produce(fetchMoreResult, (draftData) => { - draftData.project.issue.relatedMergeRequests.nodes = prevMergeRequests.concat( - newMergeRequests, - ); + draftData.project.issue.relatedMergeRequests.nodes = + prevMergeRequests.concat(newMergeRequests); }); }, }); diff --git a/app/assets/javascripts/jira_connect/subscriptions/components/sign_in_oauth_button.vue b/app/assets/javascripts/jira_connect/subscriptions/components/sign_in_oauth_button.vue index 1bf8af523a9..c55fcfbb0a6 100644 --- a/app/assets/javascripts/jira_connect/subscriptions/components/sign_in_oauth_button.vue +++ b/app/assets/javascripts/jira_connect/subscriptions/components/sign_in_oauth_button.vue @@ -168,10 +168,8 @@ export default { this.$emit('error'); }, async getOAuthToken(code) { - const { - oauth_token_payload: oauthTokenPayload, - oauth_token_path: oauthTokenPath, - } = this.oauthMetadata; + const { oauth_token_payload: oauthTokenPayload, oauth_token_path: oauthTokenPath } = + this.oauthMetadata; const { data } = await fetchOAuthToken(oauthTokenPath, { ...oauthTokenPayload, code, diff --git a/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue b/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue index ed1fbd0b876..3726eb5af64 100644 --- a/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue +++ b/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue @@ -47,7 +47,8 @@ export default {
  • diff --git a/app/assets/javascripts/lib/utils/datetime/date_calculation_utility.js b/app/assets/javascripts/lib/utils/datetime/date_calculation_utility.js index 200a3c2e8fb..dde9c15bc37 100644 --- a/app/assets/javascripts/lib/utils/datetime/date_calculation_utility.js +++ b/app/assets/javascripts/lib/utils/datetime/date_calculation_utility.js @@ -579,7 +579,11 @@ export const approximateDuration = (seconds = 0) => { const HOURS_LIMIT = 86370; // 23 hours 59 minutes 30s const ONE_DAY_LIMIT = 151170; // 41 hours 59 minutes 30s - const { days = 0, hours = 0, minutes = 0 } = parseSeconds(seconds, { + const { + days = 0, + hours = 0, + minutes = 0, + } = parseSeconds(seconds, { daysPerWeek: 7, hoursPerDay: 24, limitToDays: true, diff --git a/app/assets/javascripts/lib/utils/regexp.js b/app/assets/javascripts/lib/utils/regexp.js index 61deed7f413..da9bbf49e0e 100644 --- a/app/assets/javascripts/lib/utils/regexp.js +++ b/app/assets/javascripts/lib/utils/regexp.js @@ -7,4 +7,5 @@ export const unicodeLetters = '\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC'; -export const semverRegex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; +export const semverRegex = + /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; diff --git a/app/assets/javascripts/lib/utils/text_markdown.js b/app/assets/javascripts/lib/utils/text_markdown.js index 0646d0896b1..7b4732a2de9 100644 --- a/app/assets/javascripts/lib/utils/text_markdown.js +++ b/app/assets/javascripts/lib/utils/text_markdown.js @@ -12,7 +12,8 @@ const INDENT_LENGTH = 2; // a bullet point character (*+-) and an optional checkbox ([ ] [x]) // OR a number with a . after it and an optional checkbox ([ ] [x]) // followed by one or more whitespace characters -const LIST_LINE_HEAD_PATTERN = /^(?\s*)(?((?[*+-])|(?\d+\.))( \[([xX~\s])\])?\s)(?.)?/; +const LIST_LINE_HEAD_PATTERN = + /^(?\s*)(?((?[*+-])|(?\d+\.))( \[([xX~\s])\])?\s)(?.)?/; // detect a horizontal rule that might be mistaken for a list item (not full pattern for an
    ) const HR_PATTERN = /^((\s{0,3}-+\s*-+\s*-+\s*[\s-]*)|(\s{0,3}\*+\s*\*+\s*\*+\s*[\s*]*))$/; diff --git a/app/assets/javascripts/lib/utils/text_utility.js b/app/assets/javascripts/lib/utils/text_utility.js index a538dc8307f..aa8b0731e83 100644 --- a/app/assets/javascripts/lib/utils/text_utility.js +++ b/app/assets/javascripts/lib/utils/text_utility.js @@ -140,10 +140,8 @@ const getAverageCharWidth = memoize(function getAverageCharWidth(options = {}) { * @return {String} either the original string or a truncated version */ export const truncateWidth = (string, options = {}) => { - const { - maxWidth = TRUNCATE_WIDTH_DEFAULT_WIDTH, - fontSize = TRUNCATE_WIDTH_DEFAULT_FONT_SIZE, - } = options; + const { maxWidth = TRUNCATE_WIDTH_DEFAULT_WIDTH, fontSize = TRUNCATE_WIDTH_DEFAULT_FONT_SIZE } = + options; const { truncateIndex } = string.split('').reduce( (memo, char, index) => { let newIndex = index; diff --git a/app/assets/javascripts/members/utils.js b/app/assets/javascripts/members/utils.js index 0fdb7bde373..e3f7c206a57 100644 --- a/app/assets/javascripts/members/utils.js +++ b/app/assets/javascripts/members/utils.js @@ -161,23 +161,21 @@ export const parseDataAttributes = (el) => { }); }; -export const baseRequestFormatter = (basePropertyName, accessLevelPropertyName) => ({ - accessLevel, - memberRoleId, - ...otherProperties -}) => { - const accessLevelProperty = !isUndefined(accessLevel) - ? { [accessLevelPropertyName]: accessLevel } - : {}; +export const baseRequestFormatter = + (basePropertyName, accessLevelPropertyName) => + ({ accessLevel, memberRoleId, ...otherProperties }) => { + const accessLevelProperty = !isUndefined(accessLevel) + ? { [accessLevelPropertyName]: accessLevel } + : {}; - return { - [basePropertyName]: { - ...accessLevelProperty, - member_role_id: memberRoleId ?? null, - ...otherProperties, - }, + return { + [basePropertyName]: { + ...accessLevelProperty, + member_role_id: memberRoleId ?? null, + ...otherProperties, + }, + }; }; -}; export const groupLinkRequestFormatter = baseRequestFormatter( GROUP_LINK_BASE_PROPERTY_NAME, diff --git a/app/assets/javascripts/merge_conflicts/merge_conflicts_bundle.js b/app/assets/javascripts/merge_conflicts/merge_conflicts_bundle.js index 8c96f8a017e..5882bf34c13 100644 --- a/app/assets/javascripts/merge_conflicts/merge_conflicts_bundle.js +++ b/app/assets/javascripts/merge_conflicts/merge_conflicts_bundle.js @@ -6,12 +6,8 @@ import { createStore } from './store'; export default function initMergeConflicts() { const conflictsEl = document.querySelector('#conflicts'); - const { - sourceBranchPath, - mergeRequestPath, - conflictsPath, - resolveConflictsPath, - } = conflictsEl.dataset; + const { sourceBranchPath, mergeRequestPath, conflictsPath, resolveConflictsPath } = + conflictsEl.dataset; initIssuableSidebar(); diff --git a/app/assets/javascripts/merge_conflicts/store/getters.js b/app/assets/javascripts/merge_conflicts/store/getters.js index 54f3d6ec4bc..89ba91e0249 100644 --- a/app/assets/javascripts/merge_conflicts/store/getters.js +++ b/app/assets/javascripts/merge_conflicts/store/getters.js @@ -112,6 +112,8 @@ export const fileTextTypePresent = (state) => { return state.conflictsData?.files.some((f) => f.type === CONFLICT_TYPES.TEXT); }; -export const getFileIndex = (state) => ({ blobPath }) => { - return state.conflictsData.files.findIndex((f) => f.blobPath === blobPath); -}; +export const getFileIndex = + (state) => + ({ blobPath }) => { + return state.conflictsData.files.findIndex((f) => f.blobPath === blobPath); + }; diff --git a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue index 22688bcda0d..8c4db908d4f 100644 --- a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue +++ b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue @@ -297,12 +297,8 @@ export default { return getSortOptions({ hasManualSort: false }); }, tabCounts() { - const { - openedMergeRequests, - closedMergeRequests, - mergedMergeRequests, - allMergeRequests, - } = this.mergeRequestCounts; + const { openedMergeRequests, closedMergeRequests, mergedMergeRequests, allMergeRequests } = + this.mergeRequestCounts; return { [STATUS_OPEN]: openedMergeRequests?.count, [STATUS_MERGED]: mergedMergeRequests?.count, diff --git a/app/assets/javascripts/namespaces/cascading_settings/components/lock_popovers.vue b/app/assets/javascripts/namespaces/cascading_settings/components/lock_popovers.vue index cde77d29937..a833f806ad9 100644 --- a/app/assets/javascripts/namespaces/cascading_settings/components/lock_popovers.vue +++ b/app/assets/javascripts/namespaces/cascading_settings/components/lock_popovers.vue @@ -31,11 +31,8 @@ export default { dataset: { popoverData }, } = el; - const { - lockedByAncestor, - lockedByApplicationSetting, - ancestorNamespace, - } = convertObjectPropsToCamelCase(JSON.parse(popoverData || '{}'), { deep: true }); + const { lockedByAncestor, lockedByApplicationSetting, ancestorNamespace } = + convertObjectPropsToCamelCase(JSON.parse(popoverData || '{}'), { deep: true }); return { el, diff --git a/app/assets/javascripts/notes/mixins/discussion_navigation.js b/app/assets/javascripts/notes/mixins/discussion_navigation.js index 212ca6851f6..83ad4cef1e6 100644 --- a/app/assets/javascripts/notes/mixins/discussion_navigation.js +++ b/app/assets/javascripts/notes/mixins/discussion_navigation.js @@ -38,9 +38,8 @@ function getNextDiscussion() { if (hasReachedPageEnd()) { return firstDiscussion; } - const [nextClosestDiscussion, index, isActive] = findNextClosestVisibleDiscussion( - discussionElements, - ); + const [nextClosestDiscussion, index, isActive] = + findNextClosestVisibleDiscussion(discussionElements); if (nextClosestDiscussion && !isActive) { return nextClosestDiscussion; } diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js index 230dac51f3e..794356915c7 100644 --- a/app/assets/javascripts/notes/stores/getters.js +++ b/app/assets/javascripts/notes/stores/getters.js @@ -179,14 +179,16 @@ export const getDiscussionLastNote = (state) => (discussion) => export const unresolvedDiscussionsCount = (state) => state.unresolvedDiscussionsCount; export const resolvableDiscussionsCount = (state) => state.resolvableDiscussionsCount; -export const showJumpToNextDiscussion = (state, getters) => (mode = 'discussion') => { - const orderedDiffs = - mode !== 'discussion' - ? getters.unresolvedDiscussionsIdsByDiff - : getters.unresolvedDiscussionsIdsByDate; +export const showJumpToNextDiscussion = + (state, getters) => + (mode = 'discussion') => { + const orderedDiffs = + mode !== 'discussion' + ? getters.unresolvedDiscussionsIdsByDiff + : getters.unresolvedDiscussionsIdsByDate; - return orderedDiffs.length > 1; -}; + return orderedDiffs.length > 1; + }; export const isDiscussionResolved = (state, getters) => (discussionId) => getters.resolvedDiscussionsById[discussionId] !== undefined; @@ -302,26 +304,24 @@ export const isLastUnresolvedDiscussion = (state, getters) => (discussionId, dif return lastDiscussionId === discussionId; }; -export const findUnresolvedDiscussionIdNeighbor = (state, getters) => ({ - discussionId, - diffOrder, - step, -}) => { - const diffIds = getters.unresolvedDiscussionsIdsOrdered(diffOrder); - const dateIds = getters.unresolvedDiscussionsIdsOrdered(false); - const ids = diffIds.length ? diffIds : dateIds; - const index = ids.indexOf(discussionId) + step; +export const findUnresolvedDiscussionIdNeighbor = + (state, getters) => + ({ discussionId, diffOrder, step }) => { + const diffIds = getters.unresolvedDiscussionsIdsOrdered(diffOrder); + const dateIds = getters.unresolvedDiscussionsIdsOrdered(false); + const ids = diffIds.length ? diffIds : dateIds; + const index = ids.indexOf(discussionId) + step; - if (index < 0 && step < 0) { - return ids[ids.length - 1]; - } + if (index < 0 && step < 0) { + return ids[ids.length - 1]; + } - if (index === ids.length && step > 0) { - return ids[0]; - } + if (index === ids.length && step > 0) { + return ids[0]; + } - return ids[index]; -}; + return ids[index]; + }; // Gets the ID of the discussion following the one provided, respecting order (diff or date) // @param {Boolean} discussionId - id of the current discussion diff --git a/app/assets/javascripts/organizations/activity/index.js b/app/assets/javascripts/organizations/activity/index.js index 3b52845c46e..f3dbeb32ef1 100644 --- a/app/assets/javascripts/organizations/activity/index.js +++ b/app/assets/javascripts/organizations/activity/index.js @@ -8,11 +8,8 @@ export const initOrganizationsActivity = () => { const { dataset: { appData }, } = el; - const { - organizationActivityPath, - organizationActivityEventTypes, - organizationActivityAllEvent, - } = convertObjectPropsToCamelCase(JSON.parse(appData)); + const { organizationActivityPath, organizationActivityEventTypes, organizationActivityAllEvent } = + convertObjectPropsToCamelCase(JSON.parse(appData)); return new Vue({ el, diff --git a/app/assets/javascripts/organizations/groups_and_projects/index.js b/app/assets/javascripts/organizations/groups_and_projects/index.js index eb28428588c..8040bd4e0a2 100644 --- a/app/assets/javascripts/organizations/groups_and_projects/index.js +++ b/app/assets/javascripts/organizations/groups_and_projects/index.js @@ -32,6 +32,7 @@ export const initOrganizationsGroupsAndProjects = () => { projectsEmptyStateSvgPath, groupsEmptyStateSvgPath, newGroupPath, + groupsPath, newProjectPath, canCreateGroup, canCreateProject, @@ -56,6 +57,7 @@ export const initOrganizationsGroupsAndProjects = () => { projectsEmptyStateSvgPath, groupsEmptyStateSvgPath, newGroupPath, + groupsPath, newProjectPath, canCreateGroup, canCreateProject, diff --git a/app/assets/javascripts/organizations/projects/edit/index.js b/app/assets/javascripts/organizations/projects/edit/index.js index 1162af9bc67..2b07ddde5bb 100644 --- a/app/assets/javascripts/organizations/projects/edit/index.js +++ b/app/assets/javascripts/organizations/projects/edit/index.js @@ -11,11 +11,10 @@ export const initOrganizationsProjectsEdit = () => { const { dataset: { appData }, } = el; - const { - projectsOrganizationPath, - previewMarkdownPath, - project, - } = convertObjectPropsToCamelCase(JSON.parse(appData), { deep: true }); + const { projectsOrganizationPath, previewMarkdownPath, project } = convertObjectPropsToCamelCase( + JSON.parse(appData), + { deep: true }, + ); return new Vue({ el, diff --git a/app/assets/javascripts/organizations/settings/general/index.js b/app/assets/javascripts/organizations/settings/general/index.js index 3ac1243ff0f..8fc086b5309 100644 --- a/app/assets/javascripts/organizations/settings/general/index.js +++ b/app/assets/javascripts/organizations/settings/general/index.js @@ -13,12 +13,8 @@ export const initOrganizationsSettingsGeneral = () => { const { dataset: { appData }, } = el; - const { - organization, - organizationsPath, - rootUrl, - previewMarkdownPath, - } = convertObjectPropsToCamelCase(JSON.parse(appData)); + const { organization, organizationsPath, rootUrl, previewMarkdownPath } = + convertObjectPropsToCamelCase(JSON.parse(appData)); const apolloProvider = new VueApollo({ defaultClient: createDefaultClient(), diff --git a/app/assets/javascripts/organizations/shared/components/groups_view.vue b/app/assets/javascripts/organizations/shared/components/groups_view.vue index 80a16277490..cc32ce2be34 100644 --- a/app/assets/javascripts/organizations/shared/components/groups_view.vue +++ b/app/assets/javascripts/organizations/shared/components/groups_view.vue @@ -5,7 +5,7 @@ import { s__, __ } from '~/locale'; import GroupsList from '~/vue_shared/components/groups_list/groups_list.vue'; import { ACTION_DELETE } from '~/vue_shared/components/list_actions/constants'; import { DEFAULT_PER_PAGE } from '~/api'; -import { deleteGroup } from 'ee_else_ce/rest_api'; +import axios from '~/lib/utils/axios_utils'; import { renderDeleteSuccessToast, deleteParams, @@ -43,6 +43,7 @@ export default { inject: { organizationGid: {}, groupsEmptyStateSvgPath: {}, + groupsPath: {}, }, props: { shouldShowEmptyStateButtons: { @@ -172,7 +173,9 @@ export default { try { this.setGroupIsDeleting(nodeIndex, true); - await deleteGroup(group.id, deleteParams(group)); + await axios.delete(this.groupsPath, { + params: { id: group.fullPath, ...deleteParams(group) }, + }); this.$apollo.queries.groups.refetch(); renderDeleteSuccessToast(group, this.$options.i18n.group); } catch (error) { diff --git a/app/assets/javascripts/organizations/show/index.js b/app/assets/javascripts/organizations/show/index.js index 214515ee055..66bf5382ed7 100644 --- a/app/assets/javascripts/organizations/show/index.js +++ b/app/assets/javascripts/organizations/show/index.js @@ -34,6 +34,7 @@ export const initOrganizationsShow = () => { projectsEmptyStateSvgPath, groupsEmptyStateSvgPath, newGroupPath, + groupsPath, newProjectPath, associationCounts, canCreateProject, @@ -57,6 +58,7 @@ export const initOrganizationsShow = () => { projectsEmptyStateSvgPath, groupsEmptyStateSvgPath, newGroupPath, + groupsPath, newProjectPath, canCreateProject, canCreateGroup, diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/index.js b/app/assets/javascripts/packages_and_registries/dependency_proxy/index.js index c115898c75b..8b7192f1b5e 100644 --- a/app/assets/javascripts/packages_and_registries/dependency_proxy/index.js +++ b/app/assets/javascripts/packages_and_registries/dependency_proxy/index.js @@ -11,14 +11,8 @@ export const initDependencyProxyApp = () => { if (!el) { return null; } - const { - endpoint, - groupPath, - groupId, - noManifestsIllustration, - canClearCache, - settingsPath, - } = el.dataset; + const { endpoint, groupPath, groupId, noManifestsIllustration, canClearCache, settingsPath } = + el.dataset; return new Vue({ el, apolloProvider, diff --git a/app/assets/javascripts/packages_and_registries/settings/group/graphql/utils/cache_update.js b/app/assets/javascripts/packages_and_registries/settings/group/graphql/utils/cache_update.js index c7b0899fa4c..0b59b2e1201 100644 --- a/app/assets/javascripts/packages_and_registries/settings/group/graphql/utils/cache_update.js +++ b/app/assets/javascripts/packages_and_registries/settings/group/graphql/utils/cache_update.js @@ -1,33 +1,35 @@ import { produce } from 'immer'; import getGroupPackagesSettingsQuery from '../queries/get_group_packages_settings.query.graphql'; -export const updateGroupPackageSettings = (fullPath) => (client, { data: updatedData }) => { - const queryAndParams = { - query: getGroupPackagesSettingsQuery, - variables: { fullPath }, +export const updateGroupPackageSettings = + (fullPath) => + (client, { data: updatedData }) => { + const queryAndParams = { + query: getGroupPackagesSettingsQuery, + variables: { fullPath }, + }; + const sourceData = client.readQuery(queryAndParams); + + const data = produce(sourceData, (draftState) => { + if (updatedData.updateNamespacePackageSettings) { + draftState.group.packageSettings = { + ...updatedData.updateNamespacePackageSettings.packageSettings, + }; + } + if (updatedData.updateDependencyProxySettings) { + draftState.group.dependencyProxySetting = { + ...updatedData.updateDependencyProxySettings.dependencyProxySetting, + }; + } + if (updatedData.updateDependencyProxyImageTtlGroupPolicy) { + draftState.group.dependencyProxyImageTtlPolicy = { + ...updatedData.updateDependencyProxyImageTtlGroupPolicy.dependencyProxyImageTtlPolicy, + }; + } + }); + + client.writeQuery({ + ...queryAndParams, + data, + }); }; - const sourceData = client.readQuery(queryAndParams); - - const data = produce(sourceData, (draftState) => { - if (updatedData.updateNamespacePackageSettings) { - draftState.group.packageSettings = { - ...updatedData.updateNamespacePackageSettings.packageSettings, - }; - } - if (updatedData.updateDependencyProxySettings) { - draftState.group.dependencyProxySetting = { - ...updatedData.updateDependencyProxySettings.dependencyProxySetting, - }; - } - if (updatedData.updateDependencyProxyImageTtlGroupPolicy) { - draftState.group.dependencyProxyImageTtlPolicy = { - ...updatedData.updateDependencyProxyImageTtlGroupPolicy.dependencyProxyImageTtlPolicy, - }; - } - }); - - client.writeQuery({ - ...queryAndParams, - data, - }); -}; diff --git a/app/assets/javascripts/packages_and_registries/settings/project/graphql/utils/cache_update.js b/app/assets/javascripts/packages_and_registries/settings/project/graphql/utils/cache_update.js index 5e0be3834cb..4ec41c5fa53 100644 --- a/app/assets/javascripts/packages_and_registries/settings/project/graphql/utils/cache_update.js +++ b/app/assets/javascripts/packages_and_registries/settings/project/graphql/utils/cache_update.js @@ -1,22 +1,24 @@ import { produce } from 'immer'; import expirationPolicyQuery from '../queries/get_expiration_policy.query.graphql'; -export const updateContainerExpirationPolicy = (projectPath) => (client, { data: updatedData }) => { - const queryAndParams = { - query: expirationPolicyQuery, - variables: { projectPath }, - }; - const sourceData = client.readQuery(queryAndParams); - - const data = produce(sourceData, (draftState) => { - draftState.project.containerExpirationPolicy = { - ...draftState.project.containerExpirationPolicy, - ...updatedData.updateContainerExpirationPolicy.containerExpirationPolicy, +export const updateContainerExpirationPolicy = + (projectPath) => + (client, { data: updatedData }) => { + const queryAndParams = { + query: expirationPolicyQuery, + variables: { projectPath }, }; - }); + const sourceData = client.readQuery(queryAndParams); - client.writeQuery({ - ...queryAndParams, - data, - }); -}; + const data = produce(sourceData, (draftState) => { + draftState.project.containerExpirationPolicy = { + ...draftState.project.containerExpirationPolicy, + ...updatedData.updateContainerExpirationPolicy.containerExpirationPolicy, + }; + }); + + client.writeQuery({ + ...queryAndParams, + data, + }); + }; diff --git a/app/assets/javascripts/pages/projects/branches/index/index.js b/app/assets/javascripts/pages/projects/branches/index/index.js index b031dfd9871..216632fbb1d 100644 --- a/app/assets/javascripts/pages/projects/branches/index/index.js +++ b/app/assets/javascripts/pages/projects/branches/index/index.js @@ -6,9 +6,8 @@ import initDeleteMergedBranches from '~/branches/init_delete_merged_branches'; import initBranchMoreActions from '~/branches/init_branch_more_actions'; import initSourceCodeDropdowns from '~/vue_shared/components/download_dropdown/init_download_dropdowns'; -const { divergingCountsEndpoint, defaultBranch } = document.querySelector( - '.js-branch-list', -).dataset; +const { divergingCountsEndpoint, defaultBranch } = + document.querySelector('.js-branch-list').dataset; initDiverganceGraph(divergingCountsEndpoint, defaultBranch); BranchSortDropdown(); diff --git a/app/assets/javascripts/pages/projects/graphs/charts/index.js b/app/assets/javascripts/pages/projects/graphs/charts/index.js index 8f9593f48a5..6c09638905c 100644 --- a/app/assets/javascripts/pages/projects/graphs/charts/index.js +++ b/app/assets/javascripts/pages/projects/graphs/charts/index.js @@ -64,13 +64,8 @@ new Vue({ }); if (codeCoverageContainer?.dataset) { - const { - graphEndpoint, - graphEndDate, - graphStartDate, - graphRef, - graphCsvPath, - } = codeCoverageContainer.dataset; + const { graphEndpoint, graphEndDate, graphStartDate, graphRef, graphCsvPath } = + codeCoverageContainer.dataset; // eslint-disable-next-line no-new new Vue({ el: codeCoverageContainer, diff --git a/app/assets/javascripts/performance_bar/services/performance_bar_service.js b/app/assets/javascripts/performance_bar/services/performance_bar_service.js index 3a9788d8ab6..025ffa52eec 100644 --- a/app/assets/javascripts/performance_bar/services/performance_bar_service.js +++ b/app/assets/javascripts/performance_bar/services/performance_bar_service.js @@ -10,14 +10,8 @@ export default class PerformanceBarService { static registerInterceptor(peekUrl, callback) { PerformanceBarService.interceptor = (response) => { - const [ - fireCallback, - requestId, - requestUrl, - requestParams, - operationName, - methodVerb, - ] = PerformanceBarService.callbackParams(response, peekUrl); + const [fireCallback, requestId, requestUrl, requestParams, operationName, methodVerb] = + PerformanceBarService.callbackParams(response, peekUrl); if (fireCallback) { callback(requestId, requestUrl, operationName, requestParams, methodVerb); diff --git a/app/assets/javascripts/projects/explore/index.js b/app/assets/javascripts/projects/explore/index.js index d7b5b83f675..53f12bbb9c1 100644 --- a/app/assets/javascripts/projects/explore/index.js +++ b/app/assets/javascripts/projects/explore/index.js @@ -11,12 +11,8 @@ export const initProjectsExploreFilteredSearchAndSort = () => { dataset: { appData }, } = el; - const { - initialSort, - programmingLanguages, - starredExploreProjectsPath, - exploreRootPath, - } = convertObjectPropsToCamelCase(JSON.parse(appData)); + const { initialSort, programmingLanguages, starredExploreProjectsPath, exploreRootPath } = + convertObjectPropsToCamelCase(JSON.parse(appData)); return new Vue({ el, diff --git a/app/assets/javascripts/projects/settings/repository/branch_rules/mount_branch_rules.js b/app/assets/javascripts/projects/settings/repository/branch_rules/mount_branch_rules.js index a8736c87e22..b6882a4d368 100644 --- a/app/assets/javascripts/projects/settings/repository/branch_rules/mount_branch_rules.js +++ b/app/assets/javascripts/projects/settings/repository/branch_rules/mount_branch_rules.js @@ -13,13 +13,8 @@ const apolloProvider = new VueApollo({ export default function mountBranchRules(el) { if (!el) return null; - const { - projectPath, - branchRulesPath, - showCodeOwners, - showStatusChecks, - showApprovers, - } = el.dataset; + const { projectPath, branchRulesPath, showCodeOwners, showStatusChecks, showApprovers } = + el.dataset; return new Vue({ el, diff --git a/app/assets/javascripts/projects/upload_file.js b/app/assets/javascripts/projects/upload_file.js index 597965eabfc..a1b19abee6b 100644 --- a/app/assets/javascripts/projects/upload_file.js +++ b/app/assets/javascripts/projects/upload_file.js @@ -8,13 +8,8 @@ export const initUploadFileTrigger = () => { if (!uploadFileTriggerEl) return false; - const { - targetBranch, - originalBranch, - canPushCode, - path, - projectPath, - } = uploadFileTriggerEl.dataset; + const { targetBranch, originalBranch, canPushCode, path, projectPath } = + uploadFileTriggerEl.dataset; return new Vue({ el: uploadFileTriggerEl, diff --git a/app/assets/javascripts/prometheus_metrics/custom_metrics.js b/app/assets/javascripts/prometheus_metrics/custom_metrics.js index e10b5bf1807..a5bc912dcc3 100644 --- a/app/assets/javascripts/prometheus_metrics/custom_metrics.js +++ b/app/assets/javascripts/prometheus_metrics/custom_metrics.js @@ -27,9 +27,8 @@ export default class CustomMetrics extends PrometheusMetrics { this.$monitoredCustomMetricsEmpty = this.$monitoredCustomMetricsPanel.find( '.js-empty-custom-metrics', ); - this.$monitoredCustomMetricsList = this.$monitoredCustomMetricsPanel.find( - '.js-custom-metrics-list', - ); + this.$monitoredCustomMetricsList = + this.$monitoredCustomMetricsPanel.find('.js-custom-metrics-list'); this.$monitoredCustomMetricsNoIntegrationText = this.$monitoredCustomMetricsPanel.find( '.js-no-active-integration-text', ); @@ -46,9 +45,8 @@ export default class CustomMetrics extends PrometheusMetrics { this.$monitoredCustomMetricsEmpty, ]; - this.activeCustomMetricsEndpoint = this.$monitoredCustomMetricsPanel.data( - 'active-custom-metrics', - ); + this.activeCustomMetricsEndpoint = + this.$monitoredCustomMetricsPanel.data('active-custom-metrics'); this.environmentsDataEndpoint = this.$monitoredCustomMetricsPanel.data( 'environments-data-endpoint', ); diff --git a/app/assets/javascripts/related_issues/components/issue_token.vue b/app/assets/javascripts/related_issues/components/issue_token.vue index fa338440b01..d141ddb1d7a 100644 --- a/app/assets/javascripts/related_issues/components/issue_token.vue +++ b/app/assets/javascripts/related_issues/components/issue_token.vue @@ -48,7 +48,8 @@ export default {