@atlaskit/editor-plugin-code-block
Version:
Code block plugin for @atlaskit/editor-core
43 lines • 1.71 kB
JavaScript
import { codeBlockButtonMessages } from '@atlaskit/editor-common/messages';
import { fg } from '@atlaskit/platform-feature-flags';
export const NONE_LANGUAGE_VALUE = 'none';
export const DETECT_LANGUAGE_VALUE = 'autodetect';
export const PLAIN_TEXT_LANGUAGE_VALUE = 'text';
export const getDetectLanguageOption = formatMessage => ({
alias: [DETECT_LANGUAGE_VALUE],
label: formatMessage(codeBlockButtonMessages.detectLanguage),
selectionSource: 'pinned',
value: DETECT_LANGUAGE_VALUE
});
export const createGroupedLanguageOptions = ({
formatMessage,
languages,
recentlyUsedLanguages = []
}) => {
const recentlyUsedLanguageValues = new Set(recentlyUsedLanguages.map(language => language.value));
const allLanguages = languages.filter(language => language.value !== NONE_LANGUAGE_VALUE && language.value !== PLAIN_TEXT_LANGUAGE_VALUE && !recentlyUsedLanguageValues.has(language.value));
const plainTextOption = languages.find(language => language.value === PLAIN_TEXT_LANGUAGE_VALUE);
const pinnedOptions = fg('platform_editor_code_block_language_detection_flow') ? [getDetectLanguageOption(formatMessage)] : [];
if (plainTextOption) {
pinnedOptions.push({
...plainTextOption,
selectionSource: 'pinned'
});
}
return [{
label: '',
options: pinnedOptions
}, ...(recentlyUsedLanguages.length > 0 ? [{
label: formatMessage(codeBlockButtonMessages.recentlyUsed),
options: recentlyUsedLanguages.map(language => ({
...language,
selectionSource: 'recentlyUsed'
}))
}] : []), {
label: formatMessage(codeBlockButtonMessages.all),
options: allLanguages.map(language => ({
...language,
selectionSource: 'all'
}))
}];
};