forked from openshift/console
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBasicCodeEditor.tsx
More file actions
55 lines (52 loc) · 2.15 KB
/
BasicCodeEditor.tsx
File metadata and controls
55 lines (52 loc) · 2.15 KB
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
import * as React from 'react';
import { loader, Monaco } from '@monaco-editor/react';
import { CodeEditor } from '@patternfly/react-code-editor';
import classNames from 'classnames';
import * as monaco from 'monaco-editor';
import { useTranslation } from 'react-i18next';
import { BasicCodeEditorProps } from '@console/dynamic-plugin-sdk';
import { ErrorBoundaryInline } from '@console/shared/src/components/error';
import { useConsoleMonacoTheme } from './theme';
import './BasicCodeEditor.scss';
// Avoid using monaco from CDN
loader.config({ monaco });
/**
* PatternFly CodeEditor with i18n and theme applied. Does not include
* YAML language integration or console-specific CSS.
*
* Note that it is important that this is the only component that imports
* monaco-editor, to avoid fetching files from a 3rd-party CDN.
*/
export const BasicCodeEditor: React.FC<BasicCodeEditorProps> = (props) => {
const { t } = useTranslation('console-shared');
const [monacoRef, setMonacoRef] = React.useState<Monaco | null>(null);
useConsoleMonacoTheme(monacoRef?.editor);
return (
<ErrorBoundaryInline>
<CodeEditor
copyButtonAriaLabel={t('Copy code to clipboard')}
copyButtonSuccessTooltipText={t('Content copied to clipboard')}
copyButtonToolTipText={t('Copy code to clipboard')}
downloadButtonAriaLabel={t('Download code')}
downloadButtonToolTipText={t('Download code')}
shortcutsPopoverButtonText={t('Shortcuts')}
uploadButtonAriaLabel={t('Upload code')}
uploadButtonToolTipText={t('Upload code')}
emptyStateBody={t('Drag and drop a file or upload one.')}
emptyStateButton={t('Browse')}
emptyStateLink={t('Start from scratch')}
emptyStateTitle={t('Start editing')}
{...props}
className={classNames('co-code-editor', props.className)}
editorProps={{
...props?.editorProps,
beforeMount: (monacoInstance) => {
setMonacoRef(monacoInstance);
window.monaco = monacoInstance; // for e2e tests
props?.editorProps?.beforeMount?.(monacoInstance);
},
}}
/>
</ErrorBoundaryInline>
);
};