From dc60045db7aab599453799c75190b93692d91b7c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 14 Jul 2021 21:09:44 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- app/assets/javascripts/search/store/getters.js | 9 ++++++ app/assets/javascripts/search/store/index.js | 2 ++ app/assets/javascripts/search/store/utils.js | 24 +++++++++++++--- .../search/topbar/components/group_filter.vue | 4 ++- .../search/topbar/components/project_filter.vue | 4 ++- .../topbar/components/searchable_dropdown.vue | 33 ++++++++++++++++++++++ app/controllers/profiles/gpg_keys_controller.rb | 2 +- app/graphql/types/ci/build_need_type.rb | 2 ++ app/graphql/types/ci/detailed_status_type.rb | 7 +++++ app/graphql/types/ci/group_type.rb | 8 ++++-- app/graphql/types/ci/stage_type.rb | 16 ++++------- app/graphql/types/ci/status_action_type.rb | 7 +++++ app/models/ci/group.rb | 5 ++++ app/models/namespace_setting.rb | 2 +- app/models/user_callout.rb | 4 ++- app/policies/group_policy.rb | 1 + app/services/gpg_keys/create_service.rb | 10 ++++++- app/services/gpg_keys/destroy_service.rb | 2 ++ app/services/namespace_settings/update_service.rb | 24 ++++++++++------ app/services/snippets/create_service.rb | 14 ++++----- app/services/snippets/update_service.rb | 14 ++++----- 21 files changed, 147 insertions(+), 47 deletions(-) create mode 100644 app/assets/javascripts/search/store/getters.js (limited to 'app') diff --git a/app/assets/javascripts/search/store/getters.js b/app/assets/javascripts/search/store/getters.js new file mode 100644 index 00000000000..650af5fa55a --- /dev/null +++ b/app/assets/javascripts/search/store/getters.js @@ -0,0 +1,9 @@ +import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY } from './constants'; + +export const frequentGroups = (state) => { + return state.frequentItems[GROUPS_LOCAL_STORAGE_KEY]; +}; + +export const frequentProjects = (state) => { + return state.frequentItems[PROJECTS_LOCAL_STORAGE_KEY]; +}; diff --git a/app/assets/javascripts/search/store/index.js b/app/assets/javascripts/search/store/index.js index 1923c8b96ab..4fa88822722 100644 --- a/app/assets/javascripts/search/store/index.js +++ b/app/assets/javascripts/search/store/index.js @@ -1,6 +1,7 @@ import Vue from 'vue'; import Vuex from 'vuex'; import * as actions from './actions'; +import * as getters from './getters'; import mutations from './mutations'; import createState from './state'; @@ -8,6 +9,7 @@ Vue.use(Vuex); export const getStoreConfig = ({ query }) => ({ actions, + getters, mutations, state: createState({ query }), }); diff --git a/app/assets/javascripts/search/store/utils.js b/app/assets/javascripts/search/store/utils.js index 9f058efeaa7..60c09221ca9 100644 --- a/app/assets/javascripts/search/store/utils.js +++ b/app/assets/javascripts/search/store/utils.js @@ -24,7 +24,15 @@ export const setFrequentItemToLS = (key, data, itemData) => { return; } - const keyList = ['id', 'avatar_url', 'name', 'full_name', 'name_with_namespace', 'frequency']; + const keyList = [ + 'id', + 'avatar_url', + 'name', + 'full_name', + 'name_with_namespace', + 'frequency', + 'lastUsed', + ]; try { const frequentItems = data[key].map((obj) => extractKeys(obj, keyList)); @@ -35,17 +43,25 @@ export const setFrequentItemToLS = (key, data, itemData) => { // Up the frequency (Max 5) const currentFrequency = frequentItems[existingItemIndex].frequency; frequentItems[existingItemIndex].frequency = Math.min(currentFrequency + 1, MAX_FREQUENCY); + frequentItems[existingItemIndex].lastUsed = new Date().getTime(); } else { // Only store a max of 5 items if (frequentItems.length >= MAX_FREQUENT_ITEMS) { frequentItems.pop(); } - frequentItems.push({ ...item, frequency: 1 }); + frequentItems.push({ ...item, frequency: 1, lastUsed: new Date().getTime() }); } - // Sort by frequency - frequentItems.sort((a, b) => b.frequency - a.frequency); + // Sort by frequency and lastUsed + frequentItems.sort((a, b) => { + if (a.frequency > b.frequency) { + return -1; + } else if (a.frequency < b.frequency) { + return 1; + } + return b.lastUsed - a.lastUsed; + }); // Note we do not need to commit a mutation here as immediately after this we refresh the page to // update the search results. diff --git a/app/assets/javascripts/search/topbar/components/group_filter.vue b/app/assets/javascripts/search/topbar/components/group_filter.vue index 2040d2ca173..45a6ae73fac 100644 --- a/app/assets/javascripts/search/topbar/components/group_filter.vue +++ b/app/assets/javascripts/search/topbar/components/group_filter.vue @@ -1,6 +1,6 @@