diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-12 00:09:40 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-12 00:09:40 +0300 |
commit | ab82d93f5ba566b67dd1300da1cafe3ecdd13122 (patch) | |
tree | a1a9ea7b560159b49647bde0b81d3b396a077391 /app/assets/javascripts/super_sidebar | |
parent | 9e40efa6a6cb39c0a4a6d7d43f7445e2d6e25172 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/super_sidebar')
3 files changed, 49 insertions, 7 deletions
diff --git a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue index da1d82c1a78..fa366deeac8 100644 --- a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue +++ b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue @@ -61,9 +61,10 @@ export default { is_logged_in: isLoggedIn, current_context: currentContext, username, + track_visits_path: trackVisitsPath, } = this.sidebarData; if (isLoggedIn && currentContext.namespace) { - trackContextAccess(username, currentContext); + trackContextAccess(username, currentContext, trackVisitsPath); } }, mounted() { diff --git a/app/assets/javascripts/super_sidebar/components/user_bar.vue b/app/assets/javascripts/super_sidebar/components/user_bar.vue index 8112b479c19..89fad519b89 100644 --- a/app/assets/javascripts/super_sidebar/components/user_bar.vue +++ b/app/assets/javascripts/super_sidebar/components/user_bar.vue @@ -37,8 +37,6 @@ export default { GlIcon, }, i18n: { - createNew: __('Create new...'), - homepage: __('Homepage'), issues: __('Issues'), mergeRequests: __('Merge requests'), searchKbdHelp: sprintf( diff --git a/app/assets/javascripts/super_sidebar/utils.js b/app/assets/javascripts/super_sidebar/utils.js index 72a62ed6b71..e756651f3c0 100644 --- a/app/assets/javascripts/super_sidebar/utils.js +++ b/app/assets/javascripts/super_sidebar/utils.js @@ -2,6 +2,7 @@ import * as Sentry from '@sentry/browser'; import AccessorUtilities from '~/lib/utils/accessor'; import { FREQUENT_ITEMS, FIFTEEN_MINUTES_IN_MS } from '~/frequent_items/constants'; import { truncateNamespace } from '~/lib/utils/text_utility'; +import axios from '~/lib/utils/axios_utils'; /** * This takes an array of project or groups that were stored in the local storage, to be shown in @@ -37,11 +38,43 @@ export const getTopFrequentItems = (items, maxCount) => { return frequentItems.slice(0, maxCount); }; -const updateItemAccess = (contextItem, { lastAccessedOn, frequency = 0 } = {}) => { +/** + * This tracks projects' and groups' visits in order to suggest a list of frequently visited + * entities to the user. Currently, this track visits in two ways: + * - The legacy approach uses a simple counting algorithm and stores the data in the local storage. + * - The above approach is being migrated to a backend-based one, where visits will be stored in the + * DB, and suggestions will be made through a smarter algorithm. When we are ready to transition + * to the newer approach, the legacy one will be cleaned up. + * @param {object} item The project/group item being tracked. + * @param {string} namespace A string indicating whether the tracked entity is a project or a group. + * @param {string} trackVisitsPath The API endpoint to track visits server-side. + * @returns {void} + */ +const updateItemAccess = ( + contextItem, + { lastAccessedOn, frequency = 0 } = {}, + namespace, + trackVisitsPath, +) => { const now = Date.now(); const neverAccessed = !lastAccessedOn; const shouldUpdate = neverAccessed || Math.abs(now - lastAccessedOn) / FIFTEEN_MINUTES_IN_MS > 1; + if (shouldUpdate && gon.features?.serverSideFrecentNamespaces) { + try { + axios({ + url: trackVisitsPath, + method: 'POST', + data: { + type: namespace, + id: contextItem.id, + }, + }); + } catch (e) { + Sentry.captureException(e); + } + } + return { ...contextItem, frequency: shouldUpdate ? frequency + 1 : frequency, @@ -49,7 +82,7 @@ const updateItemAccess = (contextItem, { lastAccessedOn, frequency = 0 } = {}) = }; }; -export const trackContextAccess = (username, context) => { +export const trackContextAccess = (username, context, trackVisitsPath) => { if (!AccessorUtilities.canUseLocalStorage()) { return false; } @@ -62,9 +95,19 @@ export const trackContextAccess = (username, context) => { ); if (existingItemIndex > -1) { - storedItems[existingItemIndex] = updateItemAccess(context.item, storedItems[existingItemIndex]); + storedItems[existingItemIndex] = updateItemAccess( + context.item, + storedItems[existingItemIndex], + context.namespace, + trackVisitsPath, + ); } else { - const newItem = updateItemAccess(context.item); + const newItem = updateItemAccess( + context.item, + storedItems[existingItemIndex], + context.namespace, + trackVisitsPath, + ); if (storedItems.length === FREQUENT_ITEMS.MAX_COUNT) { sortItemsByFrequencyAndLastAccess(storedItems); storedItems.pop(); |