UNPKG

@atlaskit/editor-plugin-code-block

Version:

Code block plugin for @atlaskit/editor-core

38 lines (37 loc) 1.84 kB
import { StorageClient } from '@atlaskit/frontend-utilities/storage-client'; import { DEFAULT_LANGUAGES, getLanguageIdentifier } from '../pm-plugins/language-list'; import { DETECT_LANGUAGE_VALUE, NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE } from './language-picker-options'; export const RECENT_LANGUAGES_STORAGE_KEY = 'recently-used-languages'; const RECENT_LANGUAGES_STORAGE_CLIENT_KEY = '@atlaskit/editor-plugin-code-block'; const MAX_RECENT_LANGUAGES = 3; const RECENT_LANGUAGE_BLOCKLIST = new Set([DETECT_LANGUAGE_VALUE, NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE]); const KNOWN_LANGUAGE_VALUES = new Set(DEFAULT_LANGUAGES.map(language => getLanguageIdentifier(language))); const recentLanguagesStorageClient = new StorageClient(RECENT_LANGUAGES_STORAGE_CLIENT_KEY); const isValidRecentLanguage = language => KNOWN_LANGUAGE_VALUES.has(language) && !RECENT_LANGUAGE_BLOCKLIST.has(language); const readRecentLanguages = () => { const storedValue = recentLanguagesStorageClient.getItem(RECENT_LANGUAGES_STORAGE_KEY); return Array.isArray(storedValue) ? storedValue : []; }; export const getRecentLanguages = () => { try { return readRecentLanguages(); } catch { return []; } }; export const saveRecentLanguage = language => { if (!isValidRecentLanguage(language)) { return; } try { const recentLanguages = readRecentLanguages(); const nextRecentLanguages = Array.from(new Set([language, ...recentLanguages])).slice(0, MAX_RECENT_LANGUAGES); // StorageClient only exposes setItemWithExpiry; omitting the duration stores without expiry. recentLanguagesStorageClient.setItemWithExpiry(RECENT_LANGUAGES_STORAGE_KEY, nextRecentLanguages); } catch { return; } }; export const clearRecentLanguages = () => { recentLanguagesStorageClient.removeItem(RECENT_LANGUAGES_STORAGE_KEY); };