From 3bba41a8c5dfcca0d086eaef10ef36a705dd4f7a Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 30 Nov 2023 12:23:27 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../style/explicit_block_argument.yml | 1 - .rubocop_todo/style/guard_clause.yml | 2 - .../components/pipelines_artifacts.vue | 2 +- .../components/kubernetes_overview.vue | 15 +- .../components/kubernetes_pods.vue | 7 +- .../components/kubernetes_status_bar.vue | 2 +- .../components/kubernetes_summary.vue | 4 +- .../components/kubernetes_tabs.vue | 2 +- .../graphql_shared/possible_types.json | 3 +- app/assets/javascripts/main.js | 4 - .../ml/model_registry/apps/show_ml_model.vue | 9 +- .../apps/show_ml_model_version.vue | 18 +- .../components/model_version_detail.vue | 44 +++++ .../nav/components/responsive_app.vue | 95 --------- .../nav/components/responsive_header.vue | 37 ---- .../nav/components/responsive_home.vue | 63 ------ .../nav/components/top_nav_app.vue | 61 ------ .../nav/components/top_nav_container_view.vue | 81 -------- .../nav/components/top_nav_dropdown_menu.vue | 107 ---------- .../nav/components/top_nav_menu_item.vue | 52 ----- .../nav/components/top_nav_menu_sections.vue | 82 -------- .../nav/components/top_nav_new_dropdown.vue | 73 ------- app/assets/javascripts/nav/index.js | 31 --- app/assets/javascripts/nav/mount.js | 30 --- app/assets/javascripts/nav/stores/index.js | 5 - app/assets/javascripts/nav/utils/index.js | 1 - .../nav/utils/reset_menu_items_active.js | 14 -- .../javascripts/observability/client.js | 20 +- .../projects/ml/model_versions/show/index.js | 2 +- .../edit/components/profile_edit_app.vue | 21 +- app/assets/javascripts/profile/profile.js | 9 +- .../projects/details/upload_button.vue | 3 + .../components/delete_blob_modal.vue | 2 + .../super_sidebar/components/user_menu.vue | 15 +- app/assets/javascripts/super_sidebar/utils.js | 16 ++ .../components/checks/constants.js | 2 +- .../stylesheets/page_bundles/project.scss | 67 ++++++- .../stylesheets/page_bundles/projects.scss | 3 +- .../projects/ml/show_ml_model_component.rb | 7 +- .../ml/show_ml_model_version_component.rb | 3 + app/helpers/stat_anchors_helper.rb | 12 +- app/models/commit_status.rb | 2 +- app/models/members/project_member.rb | 11 +- app/presenters/project_presenter.rb | 53 +++-- .../user_access/refresh_service.rb | 4 +- .../migrate_records_to_ghost_user_service.rb | 7 + .../_migration.html.haml | 14 +- ...equest_review_merge_request_email.text.erb | 2 +- app/views/projects/_files.html.haml | 12 +- app/views/projects/_home_panel.html.haml | 42 ++-- .../_invite_members_empty_project.html.haml | 29 ++- app/views/projects/_sidebar.html.haml | 61 ++++++ .../projects/_stat_anchor_list.html.haml | 5 +- app/views/projects/empty.html.haml | 186 ++++++++++++------ app/views/projects/show.html.haml | 38 +++- app/views/shared/projects/_topics.html.haml | 5 +- .../development/key_contacts_management.yml | 8 + .../development/project_overview_reorg.yml | 8 + ...27_fix_broken_user_achievements_awarded.rb | 28 +++ ...28_fix_broken_user_achievements_revoked.rb | 28 +++ db/schema_migrations/20231127185327 | 1 + db/schema_migrations/20231127185328 | 1 + .../audit_event_types.md | 1 + .../geo/replication/troubleshooting.md | 13 ++ doc/api/graphql/reference/index.md | 38 ++++ doc/ci/components/index.md | 5 +- .../testing_guide/end_to_end/style_guide.md | 14 +- doc/integration/mattermost/index.md | 1 + .../clusters/connect/new_aks_cluster.md | 6 +- doc/user/project/repository/index.md | 8 +- doc/user/project/repository/web_editor.md | 99 +++++----- lib/gitlab/cleanup/project_uploads.rb | 2 +- .../background_migration/batched_migration.rb | 7 + .../batched_background_migration_helpers.rb | 2 +- lib/gitlab/gon_helper.rb | 1 + .../graphql/loaders/full_path_model_loader.rb | 3 +- locale/gitlab.pot | 44 +++-- package.json | 5 +- qa/qa/mobile/page/main/menu.rb | 60 ------ qa/qa/mobile/page/project/show.rb | 31 --- qa/qa/mobile/page/sub_menus/common.rb | 28 --- qa/qa/page/admin/menu.rb | 10 - qa/qa/page/main/menu.rb | 9 - qa/qa/page/project/show.rb | 6 +- qa/qa/page/sub_menus/common.rb | 8 - scripts/qa/quarantine-types-check | 2 +- .../ml/show_ml_model_component_spec.rb | 5 +- .../show_ml_model_version_component_spec.rb | 5 +- spec/factories/ml/model_versions.rb | 1 + ...uently_visited_projects_and_groups_spec.rb | 2 - spec/features/projects/new_project_spec.rb | 2 - .../show/user_sees_git_instructions_spec.rb | 1 + .../user_sees_setup_shortcut_buttons_spec.rb | 3 +- spec/features/projects_spec.rb | 8 + .../user_uploads_avatar_to_profile_spec.rb | 6 +- .../environments/kubernetes_overview_spec.js | 19 +- .../environments/kubernetes_pods_spec.js | 10 +- .../environments/kubernetes_summary_spec.js | 4 +- .../environments/kubernetes_tabs_spec.js | 7 +- .../model_registry/apps/show_ml_model_spec.js | 12 +- .../apps/show_ml_model_version_spec.js | 16 +- .../components/model_version_detail_spec.js | 50 +++++ spec/frontend/ml/model_registry/mock_data.js | 10 +- .../nav/components/responsive_app_spec.js | 122 ------------ .../nav/components/responsive_header_spec.js | 63 ------ .../nav/components/responsive_home_spec.js | 133 ------------- .../nav/components/top_nav_app_spec.js | 68 ------- .../components/top_nav_container_view_spec.js | 120 ----------- .../components/top_nav_dropdown_menu_spec.js | 146 -------------- .../nav/components/top_nav_menu_item_spec.js | 145 -------------- .../components/top_nav_menu_sections_spec.js | 138 ------------- .../components/top_nav_new_dropdown_spec.js | 142 ------------- spec/frontend/nav/mock_data.js | 39 ---- spec/frontend/observability/client_spec.js | 74 +++++++ .../edit/components/profile_edit_app_spec.js | 6 +- spec/frontend/read_more_spec.js | 8 +- .../components/user_menu_spec.js | 14 ++ spec/frontend/super_sidebar/utils_spec.js | 26 ++- .../components/merge_checks_spec.js | 2 +- spec/helpers/stat_anchors_helper_spec.rb | 4 + .../batched_migration_spec.rb | 14 ++ ...x_broken_user_achievements_awarded_spec.rb | 46 +++++ ...x_broken_user_achievements_revoked_spec.rb | 44 +++++ spec/models/members/project_member_spec.rb | 25 +++ spec/presenters/project_presenter_spec.rb | 5 + ...rate_records_to_ghost_user_service_spec.rb | 17 ++ .../helpers/features/top_nav_spec_helpers.rb | 33 ---- spec/views/projects/_files.html.haml_spec.rb | 6 + .../projects/_home_panel.html.haml_spec.rb | 2 + workhorse/gitaly_test.go | 15 +- workhorse/go.mod | 2 +- workhorse/internal/git/archive.go | 2 +- workhorse/internal/gitaly/gitaly.go | 7 +- workhorse/internal/gitaly/unmarshal_test.go | 2 +- workhorse/internal/redis/redis.go | 18 +- workhorse/internal/redis/redis_test.go | 3 + workhorse/internal/testhelper/gitaly.go | 21 +- yarn.lock | 10 +- 138 files changed, 1283 insertions(+), 2375 deletions(-) create mode 100644 app/assets/javascripts/ml/model_registry/components/model_version_detail.vue delete mode 100644 app/assets/javascripts/nav/components/responsive_app.vue delete mode 100644 app/assets/javascripts/nav/components/responsive_header.vue delete mode 100644 app/assets/javascripts/nav/components/responsive_home.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_app.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_container_view.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_dropdown_menu.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_menu_item.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_menu_sections.vue delete mode 100644 app/assets/javascripts/nav/components/top_nav_new_dropdown.vue delete mode 100644 app/assets/javascripts/nav/index.js delete mode 100644 app/assets/javascripts/nav/mount.js delete mode 100644 app/assets/javascripts/nav/stores/index.js delete mode 100644 app/assets/javascripts/nav/utils/index.js delete mode 100644 app/assets/javascripts/nav/utils/reset_menu_items_active.js create mode 100644 app/views/projects/_sidebar.html.haml create mode 100644 config/feature_flags/development/key_contacts_management.yml create mode 100644 config/feature_flags/development/project_overview_reorg.yml create mode 100644 db/post_migrate/20231127185327_fix_broken_user_achievements_awarded.rb create mode 100644 db/post_migrate/20231127185328_fix_broken_user_achievements_revoked.rb create mode 100644 db/schema_migrations/20231127185327 create mode 100644 db/schema_migrations/20231127185328 delete mode 100644 qa/qa/mobile/page/main/menu.rb delete mode 100644 qa/qa/mobile/page/project/show.rb delete mode 100644 qa/qa/mobile/page/sub_menus/common.rb create mode 100644 spec/frontend/ml/model_registry/components/model_version_detail_spec.js delete mode 100644 spec/frontend/nav/components/responsive_app_spec.js delete mode 100644 spec/frontend/nav/components/responsive_header_spec.js delete mode 100644 spec/frontend/nav/components/responsive_home_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_app_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_container_view_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_dropdown_menu_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_menu_item_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_menu_sections_spec.js delete mode 100644 spec/frontend/nav/components/top_nav_new_dropdown_spec.js delete mode 100644 spec/frontend/nav/mock_data.js create mode 100644 spec/migrations/fix_broken_user_achievements_awarded_spec.rb create mode 100644 spec/migrations/fix_broken_user_achievements_revoked_spec.rb delete mode 100644 spec/support/helpers/features/top_nav_spec_helpers.rb diff --git a/.rubocop_todo/style/explicit_block_argument.yml b/.rubocop_todo/style/explicit_block_argument.yml index 48be875ab5a..c6f67604643 100644 --- a/.rubocop_todo/style/explicit_block_argument.yml +++ b/.rubocop_todo/style/explicit_block_argument.yml @@ -86,7 +86,6 @@ Style/ExplicitBlockArgument: - 'spec/support/database/gitlab_schemas_validate_connection.rb' - 'spec/support/helpers/feature_flag_helpers.rb' - 'spec/support/helpers/features/runners_helpers.rb' - - 'spec/support/helpers/features/top_nav_spec_helpers.rb' - 'spec/support/helpers/modal_helpers.rb' - 'spec/support/helpers/next_found_instance_of.rb' - 'spec/support/helpers/usage_data_helpers.rb' diff --git a/.rubocop_todo/style/guard_clause.yml b/.rubocop_todo/style/guard_clause.yml index 3dcc18c34f3..04dc90edb95 100644 --- a/.rubocop_todo/style/guard_clause.yml +++ b/.rubocop_todo/style/guard_clause.yml @@ -555,8 +555,6 @@ Style/GuardClause: - 'lib/tasks/config_lint.rake' - 'lib/tasks/gettext.rake' - 'qa/qa/ee/page/file/show.rb' - - 'qa/qa/mobile/page/main/menu.rb' - - 'qa/qa/mobile/page/sub_menus/common.rb' - 'qa/qa/page/component/snippet.rb' - 'qa/qa/page/mattermost/login.rb' - 'qa/qa/page/page_concern.rb' diff --git a/app/assets/javascripts/ci/pipelines_page/components/pipelines_artifacts.vue b/app/assets/javascripts/ci/pipelines_page/components/pipelines_artifacts.vue index 634fc2ad447..a45387ca676 100644 --- a/app/assets/javascripts/ci/pipelines_page/components/pipelines_artifacts.vue +++ b/app/assets/javascripts/ci/pipelines_page/components/pipelines_artifacts.vue @@ -75,6 +75,6 @@ export default { /* TODO: Use max-height prop when gitlab-ui got updated. See https://gitlab.com/gitlab-org/gitlab-ui/-/issues/2374 */ ::v-deep .gl-new-dropdown-inner { - max-height: 310px; + max-height: 310px !important; } diff --git a/app/assets/javascripts/environments/components/kubernetes_overview.vue b/app/assets/javascripts/environments/components/kubernetes_overview.vue index 36cce29d624..d5a7b43c953 100644 --- a/app/assets/javascripts/environments/components/kubernetes_overview.vue +++ b/app/assets/javascripts/environments/components/kubernetes_overview.vue @@ -43,7 +43,7 @@ export default { return { isVisible: false, error: '', - hasFailedState: false, + failedState: {}, podsLoading: false, workloadTypesLoading: false, }; @@ -78,6 +78,9 @@ export default { return this.hasFailedState ? 'error' : 'success'; }, + hasFailedState() { + return Object.values(this.failedState).some((item) => item); + }, }, methods: { toggleCollapse() { @@ -86,6 +89,12 @@ export default { onClusterError(message) { this.error = message; }, + onUpdateFailedState(event) { + this.failedState = { + ...this.failedState, + ...event, + }; + }, }, i18n: { collapse: __('Collapse'), @@ -126,14 +135,14 @@ export default { class="gl-mb-5" @cluster-error="onClusterError" @loading="podsLoading = $event" - @failed="hasFailedState = true" /> + @update-failed-state="onUpdateFailedState" /> diff --git a/app/assets/javascripts/environments/components/kubernetes_pods.vue b/app/assets/javascripts/environments/components/kubernetes_pods.vue index 743159d6256..2015355f794 100644 --- a/app/assets/javascripts/environments/components/kubernetes_pods.vue +++ b/app/assets/javascripts/environments/components/kubernetes_pods.vue @@ -82,9 +82,10 @@ export default { methods: { countPodsByPhase(phase) { const filteredPods = this.k8sPods.filter((item) => item.status.phase === phase); - if (phase === PHASE_FAILED && filteredPods.length) { - this.$emit('failed'); - } + + const hasFailedState = Boolean(phase === PHASE_FAILED && filteredPods.length); + this.$emit('update-failed-state', { pods: hasFailedState }); + return filteredPods.length; }, }, diff --git a/app/assets/javascripts/environments/components/kubernetes_status_bar.vue b/app/assets/javascripts/environments/components/kubernetes_status_bar.vue index 8ecb61711ce..20ed67f6bd9 100644 --- a/app/assets/javascripts/environments/components/kubernetes_status_bar.vue +++ b/app/assets/javascripts/environments/components/kubernetes_status_bar.vue @@ -153,7 +153,7 @@ export default { }, }, i18n: { - healthLabel: s__('Environment|Environment health'), + healthLabel: s__('Environment|Environment status'), syncStatusLabel: s__('Environment|Sync status'), }, badgeContainerClasses: 'gl-display-flex gl-align-items-center gl-flex-shrink-0 gl-mr-3 gl-mb-2', diff --git a/app/assets/javascripts/environments/components/kubernetes_summary.vue b/app/assets/javascripts/environments/components/kubernetes_summary.vue index 1f4e91afe35..2912fd8f4d8 100644 --- a/app/assets/javascripts/environments/components/kubernetes_summary.vue +++ b/app/assets/javascripts/environments/components/kubernetes_summary.vue @@ -140,9 +140,7 @@ export default { return workloadType.items?.failed?.length > 0; }); - if (failed) { - this.$emit('failed'); - } + this.$emit('update-failed-state', { summary: failed }); }, }, i18n: { diff --git a/app/assets/javascripts/environments/components/kubernetes_tabs.vue b/app/assets/javascripts/environments/components/kubernetes_tabs.vue index 60b36596ef3..0d80b1fd797 100644 --- a/app/assets/javascripts/environments/components/kubernetes_tabs.vue +++ b/app/assets/javascripts/environments/components/kubernetes_tabs.vue @@ -140,7 +140,7 @@ export default { :namespace="namespace" :configuration="configuration" @loading="$emit('loading', $event)" - @failed="$emit('failed')" + @update-failed-state="$emit('update-failed-state', $event)" @cluster-error="$emit('cluster-error', $event)" /> diff --git a/app/assets/javascripts/graphql_shared/possible_types.json b/app/assets/javascripts/graphql_shared/possible_types.json index 4ef0d067030..dbdadf371ca 100644 --- a/app/assets/javascripts/graphql_shared/possible_types.json +++ b/app/assets/javascripts/graphql_shared/possible_types.json @@ -4,7 +4,8 @@ "AlertManagementPrometheusIntegration" ], "AmazonS3ConfigurationInterface": [ - "AmazonS3ConfigurationType" + "AmazonS3ConfigurationType", + "InstanceAmazonS3ConfigurationType" ], "BaseHeaderInterface": [ "AuditEventStreamingHeader", diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index a3cd7a627ee..e9a4b936b9c 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -30,7 +30,6 @@ import { initUserTracking, initDefaultTrackers } from './tracking'; import GlFieldErrors from './gl_field_errors'; import initUserPopovers from './user_popovers'; import initBroadcastNotifications from './broadcast_notification'; -import { initTopNav } from './nav'; import { initCopyCodeButton } from './behaviors/copy_code'; import initGitlabVersionCheck from './gitlab_version_check'; @@ -82,9 +81,6 @@ initRails(); function deferredInitialisation() { const $body = $('body'); - if (!gon.use_new_navigation) { - initTopNav(); - } initBreadcrumbs(); initPrefetchLinks('.js-prefetch-document'); initLogoAnimation(); diff --git a/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue b/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue index 2c60e05dc57..a3182d9e622 100644 --- a/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue +++ b/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue @@ -3,6 +3,7 @@ import { GlTab, GlTabs, GlBadge } from '@gitlab/ui'; import MetadataItem from '~/vue_shared/components/registry/metadata_item.vue'; import TitleArea from '~/vue_shared/components/registry/title_area.vue'; import ModelVersionList from '~/ml/model_registry/components/model_version_list.vue'; +import ModelVersionDetail from '~/ml/model_registry/components/model_version_detail.vue'; import * as i18n from '../translations'; export default { @@ -14,6 +15,7 @@ export default { GlTab, GlBadge, MetadataItem, + ModelVersionDetail, }, props: { model: { @@ -28,6 +30,9 @@ export default { candidateCount() { return this.model.candidateCount || 0; }, + latestVersionTitle() { + return `${i18n.LATEST_VERSION_LABEL}: ${this.model.latestVersion.version}`; + }, }, i18n, }; @@ -50,9 +55,9 @@ export default { -

{{ $options.i18n.LATEST_VERSION_LABEL }}

{{ $options.i18n.NO_VERSIONS_LABEL }}
diff --git a/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue b/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue index a9440aff1ce..6608f44ecf7 100644 --- a/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue +++ b/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue @@ -1,16 +1,30 @@ diff --git a/app/assets/javascripts/ml/model_registry/components/model_version_detail.vue b/app/assets/javascripts/ml/model_registry/components/model_version_detail.vue new file mode 100644 index 00000000000..19d91df43b2 --- /dev/null +++ b/app/assets/javascripts/ml/model_registry/components/model_version_detail.vue @@ -0,0 +1,44 @@ + + + diff --git a/app/assets/javascripts/nav/components/responsive_app.vue b/app/assets/javascripts/nav/components/responsive_app.vue deleted file mode 100644 index 68a39f862fc..00000000000 --- a/app/assets/javascripts/nav/components/responsive_app.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/responsive_header.vue b/app/assets/javascripts/nav/components/responsive_header.vue deleted file mode 100644 index e29b4a67383..00000000000 --- a/app/assets/javascripts/nav/components/responsive_header.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/responsive_home.vue b/app/assets/javascripts/nav/components/responsive_home.vue deleted file mode 100644 index 371b252a6ba..00000000000 --- a/app/assets/javascripts/nav/components/responsive_home.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_app.vue b/app/assets/javascripts/nav/components/top_nav_app.vue deleted file mode 100644 index 22c77e9ae32..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_app.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_container_view.vue b/app/assets/javascripts/nav/components/top_nav_container_view.vue deleted file mode 100644 index 36e4a278da9..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_container_view.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_dropdown_menu.vue b/app/assets/javascripts/nav/components/top_nav_dropdown_menu.vue deleted file mode 100644 index fa202a0574d..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_dropdown_menu.vue +++ /dev/null @@ -1,107 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_menu_item.vue b/app/assets/javascripts/nav/components/top_nav_menu_item.vue deleted file mode 100644 index bf1fd691ca8..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_menu_item.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_menu_sections.vue b/app/assets/javascripts/nav/components/top_nav_menu_sections.vue deleted file mode 100644 index 1f3f11dc624..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_menu_sections.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/components/top_nav_new_dropdown.vue b/app/assets/javascripts/nav/components/top_nav_new_dropdown.vue deleted file mode 100644 index 2dfd77bc02e..00000000000 --- a/app/assets/javascripts/nav/components/top_nav_new_dropdown.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/app/assets/javascripts/nav/index.js b/app/assets/javascripts/nav/index.js deleted file mode 100644 index abd537d2c9a..00000000000 --- a/app/assets/javascripts/nav/index.js +++ /dev/null @@ -1,31 +0,0 @@ -// TODO: With the combined_menu feature flag removed, there's likely a better -// way to slice up the async import (i.e., include trigger in main bundle, but -// async import subviews. Don't do this at the cost of UX). -// See https://gitlab.com/gitlab-org/gitlab/-/issues/336042 -const importModule = () => import(/* webpackChunkName: 'top_nav' */ './mount'); - -const tryMountTopNav = async () => { - const el = document.getElementById('js-top-nav'); - - if (!el) { - return; - } - - const { mountTopNav } = await importModule(); - - mountTopNav(el); -}; - -const tryMountTopNavResponsive = async () => { - const el = document.getElementById('js-top-nav-responsive'); - - if (!el) { - return; - } - - const { mountTopNavResponsive } = await importModule(); - - mountTopNavResponsive(el); -}; - -export const initTopNav = async () => Promise.all([tryMountTopNav(), tryMountTopNavResponsive()]); diff --git a/app/assets/javascripts/nav/mount.js b/app/assets/javascripts/nav/mount.js deleted file mode 100644 index 0fc946bea76..00000000000 --- a/app/assets/javascripts/nav/mount.js +++ /dev/null @@ -1,30 +0,0 @@ -import Vue from 'vue'; -// eslint-disable-next-line no-restricted-imports -import Vuex from 'vuex'; -import ResponsiveApp from './components/responsive_app.vue'; -import App from './components/top_nav_app.vue'; -import { createStore } from './stores'; - -Vue.use(Vuex); - -const mount = (el, Component) => { - const viewModel = JSON.parse(el.dataset.viewModel); - const store = createStore(); - - return new Vue({ - el, - name: 'TopNavRoot', - store, - render(h) { - return h(Component, { - props: { - navData: viewModel, - }, - }); - }, - }); -}; - -export const mountTopNav = (el) => mount(el, App); - -export const mountTopNavResponsive = (el) => mount(el, ResponsiveApp); diff --git a/app/assets/javascripts/nav/stores/index.js b/app/assets/javascripts/nav/stores/index.js deleted file mode 100644 index 7c8f93f042c..00000000000 --- a/app/assets/javascripts/nav/stores/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// eslint-disable-next-line no-restricted-imports -import Vuex from 'vuex'; -import { createStoreOptions } from '~/frequent_items/store'; - -export const createStore = () => new Vuex.Store(createStoreOptions()); diff --git a/app/assets/javascripts/nav/utils/index.js b/app/assets/javascripts/nav/utils/index.js deleted file mode 100644 index 6d93818f0d3..00000000000 --- a/app/assets/javascripts/nav/utils/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './reset_menu_items_active'; diff --git a/app/assets/javascripts/nav/utils/reset_menu_items_active.js b/app/assets/javascripts/nav/utils/reset_menu_items_active.js deleted file mode 100644 index 9b5d8e97c9c..00000000000 --- a/app/assets/javascripts/nav/utils/reset_menu_items_active.js +++ /dev/null @@ -1,14 +0,0 @@ -const resetActiveInArray = (arr) => arr?.map((menuItem) => ({ ...menuItem, active: false })); - -/** - * This method sets `active: false` for the menu items within the given nav data. - * - * @returns navData with the menu items updated with `active: false` - */ -export const resetMenuItemsActive = ({ primary, secondary, ...navData }) => { - return { - ...navData, - primary: resetActiveInArray(primary), - secondary: resetActiveInArray(secondary), - }; -}; diff --git a/app/assets/javascripts/observability/client.js b/app/assets/javascripts/observability/client.js index be13e69f225..9c3f9dda4d0 100644 --- a/app/assets/javascripts/observability/client.js +++ b/app/assets/javascripts/observability/client.js @@ -251,10 +251,26 @@ async function fetchOperations(operationsUrl, serviceName) { } } -async function fetchMetrics(metricsUrl) { +async function fetchMetrics(metricsUrl, { filters = {}, limit } = {}) { try { + const params = new URLSearchParams(); + + if (Array.isArray(filters.search)) { + const searchPrefix = filters.search + .map((f) => f.value) + .join(' ') + .trim(); + + if (searchPrefix) { + params.append('starts_with', searchPrefix); + if (limit) { + params.append('limit', limit); + } + } + } const { data } = await axios.get(metricsUrl, { withCredentials: true, + params, }); if (!Array.isArray(data.metrics)) { throw new Error('metrics are missing/invalid in the response'); // eslint-disable-line @gitlab/require-i18n-strings @@ -299,6 +315,6 @@ export function buildClient(config) { fetchTrace: (traceId) => fetchTrace(tracingUrl, traceId), fetchServices: () => fetchServices(servicesUrl), fetchOperations: (serviceName) => fetchOperations(operationsUrl, serviceName), - fetchMetrics: () => fetchMetrics(metricsUrl), + fetchMetrics: (options) => fetchMetrics(metricsUrl, options), }; } diff --git a/app/assets/javascripts/pages/projects/ml/model_versions/show/index.js b/app/assets/javascripts/pages/projects/ml/model_versions/show/index.js index 1a2b85d7e16..7202dcccd31 100644 --- a/app/assets/javascripts/pages/projects/ml/model_versions/show/index.js +++ b/app/assets/javascripts/pages/projects/ml/model_versions/show/index.js @@ -1,4 +1,4 @@ import { initSimpleApp } from '~/helpers/init_simple_app_helper'; import { ShowMlModelVersion } from '~/ml/model_registry/apps'; -initSimpleApp('#js-mount-show-ml-model-version', ShowMlModelVersion); +initSimpleApp('#js-mount-show-ml-model-version', ShowMlModelVersion, { withApolloProvider: true }); diff --git a/app/assets/javascripts/profile/edit/components/profile_edit_app.vue b/app/assets/javascripts/profile/edit/components/profile_edit_app.vue index 815b8742500..eedb5d7764e 100644 --- a/app/assets/javascripts/profile/edit/components/profile_edit_app.vue +++ b/app/assets/javascripts/profile/edit/components/profile_edit_app.vue @@ -3,7 +3,6 @@ import { nextTick } from 'vue'; import { GlForm, GlButton } from '@gitlab/ui'; import { VARIANT_DANGER, VARIANT_INFO, createAlert } from '~/alert'; import axios from '~/lib/utils/axios_utils'; -import { readFileAsDataURL } from '~/lib/utils/file_utility'; import SetStatusForm from '~/set_status_modal/set_status_form.vue'; import SettingsBlock from '~/packages_and_registries/shared/components/settings_block.vue'; import { isUserBusy, computedClearStatusAfterValue } from '~/set_status_modal/utils'; @@ -106,20 +105,12 @@ export default { this.updateProfileSettings = false; } }, - async syncHeaderAvatars() { - const dataURL = await readFileAsDataURL(this.avatarBlob); - - const elements = gon?.use_new_navigation - ? ['[data-testid="user-dropdown"] .gl-avatar'] - : ['.header-user-avatar', '.js-sidebar-user-avatar']; - - elements.forEach((selector) => { - const node = document.querySelector(selector); - if (!node) return; - - node.setAttribute('src', dataURL); - node.setAttribute('srcset', dataURL); - }); + syncHeaderAvatars() { + document.dispatchEvent( + new CustomEvent('userAvatar:update', { + detail: { url: URL.createObjectURL(this.avatarBlob) }, + }), + ); }, onBlobChange(blob) { this.avatarBlob = blob; diff --git a/app/assets/javascripts/profile/profile.js b/app/assets/javascripts/profile/profile.js index 4d3824f910c..16f0110a1af 100644 --- a/app/assets/javascripts/profile/profile.js +++ b/app/assets/javascripts/profile/profile.js @@ -89,12 +89,9 @@ export default class Profile { } updateHeaderAvatar() { - if (gon?.use_new_navigation) { - $('[data-testid="user-dropdown"] .gl-avatar').attr('src', this.avatarGlCrop.dataURL); - } else { - $('.header-user-avatar').attr('src', this.avatarGlCrop.dataURL); - $('.js-sidebar-user-avatar').attr('src', this.avatarGlCrop.dataURL); - } + const url = URL.createObjectURL(this.avatarGlCrop.getBlob()); + + document.dispatchEvent(new CustomEvent('userAvatar:update', { detail: { url } })); } setRepoRadio() { diff --git a/app/assets/javascripts/projects/details/upload_button.vue b/app/assets/javascripts/projects/details/upload_button.vue index e1c8c66a214..d19ec4bcab6 100644 --- a/app/assets/javascripts/projects/details/upload_button.vue +++ b/app/assets/javascripts/projects/details/upload_button.vue @@ -36,7 +36,10 @@ export default { {{ __('Upload File') }} diff --git a/app/assets/javascripts/repository/components/delete_blob_modal.vue b/app/assets/javascripts/repository/components/delete_blob_modal.vue index 079d4c522a8..8d4c4384e1d 100644 --- a/app/assets/javascripts/repository/components/delete_blob_modal.vue +++ b/app/assets/javascripts/repository/components/delete_blob_modal.vue @@ -269,6 +269,7 @@ export default { :invalid-feedback="form.fields['commit_message'].feedback" >