Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 112x 3x 2x 2x 2x 1x 1x 3x 7x 7x 7x 10x 6x 10x 6x 3x 3x 3x 3x 1x 3x 6x 8x 2x 6x 5x 1x 6x 6x 1x 1x 3x 6x 14x 12x 3x 4x 7x 7x 7x | import AccessorUtilities from '~/lib/utils/accessor'; import { MAX_FREQUENT_ITEMS, MAX_FREQUENCY, SIDEBAR_PARAMS } from './constants'; function extractKeys(object, keyList) { return Object.fromEntries(keyList.map((key) => [key, object[key]])); } export const loadDataFromLS = (key) => { Iif (!AccessorUtilities.canUseLocalStorage()) { return []; } try { return JSON.parse(localStorage.getItem(key)) || []; } catch { // The LS got in a bad state, let's wipe it localStorage.removeItem(key); return []; } }; export const setFrequentItemToLS = (key, data, itemData) => { Iif (!AccessorUtilities.canUseLocalStorage()) { return []; } const keyList = [ 'id', 'avatar_url', 'name', 'full_name', 'name_with_namespace', 'frequency', 'lastUsed', ]; try { const frequentItems = data[key].map((obj) => extractKeys(obj, keyList)); const item = extractKeys(itemData, keyList); const existingItemIndex = frequentItems.findIndex((i) => i.id === item.id); if (existingItemIndex >= 0) { // 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, lastUsed: new Date().getTime() }); } // 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. localStorage.setItem(key, JSON.stringify(frequentItems)); return frequentItems; } catch { // The LS got in a bad state, let's wipe it localStorage.removeItem(key); return []; } }; export const mergeById = (inflatedData, storedData) => { return inflatedData.map((data) => { const stored = storedData?.find((d) => d.id === data.id) || {}; return { ...stored, ...data }; }); }; export const isSidebarDirty = (currentQuery, urlQuery) => { return SIDEBAR_PARAMS.some((param) => { // userAddParam ensures we don't get a false dirty from null !== undefined const userAddedParam = !urlQuery[param] && currentQuery[param]; const userChangedExistingParam = urlQuery[param] && urlQuery[param] !== currentQuery[param]; return userAddedParam || userChangedExistingParam; }); }; |