2024-06-19 18:05:07 +03:00
|
|
|
import { isDesktop } from "react-device-detect";
|
|
|
|
|
import { MonacoEditor } from "./MonacoEditor";
|
|
|
|
|
import { CodeMirrorEditor } from "./CodeMirrorEditor";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Provides an interface for a Code Editor, to enable easy swapping between different implementations
|
|
|
|
|
*/
|
|
|
|
|
export type CodeEditorProps = {
|
|
|
|
|
initialContent: string;
|
|
|
|
|
yamlSchemaUrl: string;
|
|
|
|
|
onDidChangeContent: (content: string) => void;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** Used to swap between the Monaco editor and the CodeMirror editor depending on device type.
|
|
|
|
|
* The Monaco editor doesn't work well on mobile devices, see Github issue: https://github.com/microsoft/monaco-editor/issues/246
|
|
|
|
|
*
|
|
|
|
|
* A common solution is to switch to CodeMirror on mobile devices as they have invested significantly in touch support.
|
|
|
|
|
*
|
|
|
|
|
* It would be great to revisit this in in the future if/when Monaco improves mobile support.
|
|
|
|
|
*/
|
2024-06-19 18:27:52 +03:00
|
|
|
export const CodeEditor: (props: CodeEditorProps) => JSX.Element = isDesktop
|
|
|
|
|
? MonacoEditor
|
|
|
|
|
: CodeMirrorEditor;
|