Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/super_sidebar/utils.js')
-rw-r--r--app/assets/javascripts/super_sidebar/utils.js44
1 files changed, 35 insertions, 9 deletions
diff --git a/app/assets/javascripts/super_sidebar/utils.js b/app/assets/javascripts/super_sidebar/utils.js
index 3b17a35c5bc..cbf93155fb6 100644
--- a/app/assets/javascripts/super_sidebar/utils.js
+++ b/app/assets/javascripts/super_sidebar/utils.js
@@ -1,3 +1,4 @@
+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';
@@ -35,17 +36,15 @@ export const getTopFrequentItems = (items, maxCount) => {
return frequentItems.slice(0, maxCount);
};
-const updateItemAccess = (item) => {
+const updateItemAccess = (contextItem, { lastAccessedOn, frequency = 0 } = {}) => {
const now = Date.now();
- const neverAccessed = !item.lastAccessedOn;
- const shouldUpdate =
- neverAccessed || Math.abs(now - item.lastAccessedOn) / FIFTEEN_MINUTES_IN_MS > 1;
- const currentFrequency = item.frequency ?? 0;
+ const neverAccessed = !lastAccessedOn;
+ const shouldUpdate = neverAccessed || Math.abs(now - lastAccessedOn) / FIFTEEN_MINUTES_IN_MS > 1;
return {
- ...item,
- frequency: shouldUpdate ? currentFrequency + 1 : currentFrequency,
- lastAccessedOn: shouldUpdate ? now : item.lastAccessedOn,
+ ...contextItem,
+ frequency: shouldUpdate ? frequency + 1 : frequency,
+ lastAccessedOn: shouldUpdate ? now : lastAccessedOn,
};
};
@@ -62,7 +61,7 @@ export const trackContextAccess = (username, context) => {
);
if (existingItemIndex > -1) {
- storedItems[existingItemIndex] = updateItemAccess(storedItems[existingItemIndex]);
+ storedItems[existingItemIndex] = updateItemAccess(context.item, storedItems[existingItemIndex]);
} else {
const newItem = updateItemAccess(context.item);
if (storedItems.length === FREQUENT_ITEMS.MAX_COUNT) {
@@ -84,4 +83,31 @@ export const formatContextSwitcherItems = (items) =>
link,
}));
+export const getItemsFromLocalStorage = ({ storageKey, maxItems }) => {
+ if (!AccessorUtilities.canUseLocalStorage()) {
+ return [];
+ }
+
+ try {
+ const parsedCachedFrequentItems = JSON.parse(localStorage.getItem(storageKey));
+ return getTopFrequentItems(parsedCachedFrequentItems, maxItems);
+ } catch (e) {
+ Sentry.captureException(e);
+ return [];
+ }
+};
+
+export const removeItemFromLocalStorage = ({ storageKey, item }) => {
+ try {
+ const parsedCachedFrequentItems = JSON.parse(localStorage.getItem(storageKey));
+ const filteredItems = parsedCachedFrequentItems.filter((i) => i.id !== item.id);
+ localStorage.setItem(storageKey, JSON.stringify(filteredItems));
+
+ return filteredItems;
+ } catch (e) {
+ Sentry.captureException(e);
+ return [];
+ }
+};
+
export const ariaCurrent = (isActive) => (isActive ? 'page' : null);