mirror of
https://github.com/outline/outline.git
synced 2026-02-18 01:28:40 -06:00
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import Storage from "../../utils/Storage";
|
|
|
|
const RecentStorageKey = "rme-code-language";
|
|
const StorageKey = "frequent-code-languages";
|
|
|
|
export const FrequentlyUsedCount = {
|
|
Get: 5,
|
|
Track: 10,
|
|
};
|
|
|
|
export const setRecentCodeLanguage = (language: string) => {
|
|
const frequentLangs = (Storage.get(StorageKey) ?? {}) as Record<
|
|
string,
|
|
number
|
|
>;
|
|
|
|
if (Object.keys(frequentLangs).length === 0) {
|
|
const lastUsedLang = Storage.get(RecentStorageKey);
|
|
if (lastUsedLang) {
|
|
frequentLangs[lastUsedLang] = 1;
|
|
}
|
|
}
|
|
|
|
frequentLangs[language] = (frequentLangs[language] ?? 0) + 1;
|
|
|
|
const frequentLangEntries = Object.entries(frequentLangs);
|
|
|
|
if (frequentLangEntries.length > FrequentlyUsedCount.Track) {
|
|
sortFrequencies(frequentLangEntries);
|
|
|
|
const lastEntry = frequentLangEntries[FrequentlyUsedCount.Track];
|
|
if (lastEntry[0] === language) {
|
|
frequentLangEntries.splice(FrequentlyUsedCount.Track - 1, 1);
|
|
} else {
|
|
frequentLangEntries.splice(FrequentlyUsedCount.Track);
|
|
}
|
|
}
|
|
|
|
Storage.set(StorageKey, Object.fromEntries(frequentLangEntries));
|
|
Storage.set(RecentStorageKey, language);
|
|
};
|
|
|
|
export const getRecentCodeLanguage = () => Storage.get(RecentStorageKey);
|
|
|
|
export const getFrequentCodeLanguages = () => {
|
|
const recentLang = Storage.get(RecentStorageKey);
|
|
const frequentLangEntries = Object.entries(
|
|
(Storage.get(StorageKey) ?? {}) as Record<string, number>
|
|
);
|
|
|
|
const frequentLangs = sortFrequencies(frequentLangEntries)
|
|
.slice(0, FrequentlyUsedCount.Get)
|
|
.map(([lang]) => lang);
|
|
|
|
const isRecentLangPresent = frequentLangs.includes(recentLang);
|
|
if (recentLang && !isRecentLangPresent) {
|
|
frequentLangs.pop();
|
|
frequentLangs.push(recentLang);
|
|
}
|
|
|
|
return frequentLangs;
|
|
};
|
|
|
|
const sortFrequencies = (freqs: [string, number][]) =>
|
|
freqs.sort((a, b) => (a[1] >= b[1] ? -1 : 1));
|