diff --git a/packages/graphiql-react/src/components/operation-editor.tsx b/packages/graphiql-react/src/components/operation-editor.tsx index 4dfd7ac4226..90075353c84 100644 --- a/packages/graphiql-react/src/components/operation-editor.tsx +++ b/packages/graphiql-react/src/components/operation-editor.tsx @@ -47,6 +47,7 @@ interface OperationEditorProps extends EditorProps { export const OperationEditor: FC = ({ onClickReference, onEdit, + editorOverrides, ...props }) => { const { @@ -231,6 +232,7 @@ export const OperationEditor: FC = ({ const editor = createEditor(ref, { model, theme: monacoTheme, + ...editorOverrides, }); setEditor({ queryEditor: editor }); diff --git a/packages/graphiql-react/src/components/request-headers-editor.tsx b/packages/graphiql-react/src/components/request-headers-editor.tsx index ac9f913a202..1af91ce7b82 100644 --- a/packages/graphiql-react/src/components/request-headers-editor.tsx +++ b/packages/graphiql-react/src/components/request-headers-editor.tsx @@ -23,6 +23,7 @@ interface RequestHeadersEditorProps extends EditorProps { export const RequestHeadersEditor: FC = ({ onEdit, + editorOverrides, ...props }) => { const { setEditor, run, prettifyEditors, mergeQuery } = useGraphiQLActions(); @@ -44,7 +45,7 @@ export const RequestHeadersEditor: FC = ({ uri: `${uriInstanceId}${URI_NAME.requestHeaders}`, value: initialHeaders, }); - const editor = createEditor(ref, { model }); + const editor = createEditor(ref, { model, ...editorOverrides }); setEditor({ headerEditor: editor }); const disposables = [ editor.addAction({ ...KEY_BINDINGS.runQuery, run }), diff --git a/packages/graphiql-react/src/components/response-editor.tsx b/packages/graphiql-react/src/components/response-editor.tsx index 4cc32990e16..2b7a02533d8 100644 --- a/packages/graphiql-react/src/components/response-editor.tsx +++ b/packages/graphiql-react/src/components/response-editor.tsx @@ -37,6 +37,7 @@ interface ResponseEditorProps extends EditorProps { export const ResponseEditor: FC = ({ responseTooltip: ResponseTooltip, + editorOverrides, ...props }) => { const { setEditor, run } = useGraphiQLActions(); @@ -69,6 +70,7 @@ export const ResponseEditor: FC = ({ lineNumbers: 'off', wordWrap: 'on', // Toggle word wrap on resizing editors contextmenu: false, // Disable the right-click context menu + ...editorOverrides, }); setEditor({ responseEditor: editor }); diff --git a/packages/graphiql-react/src/components/variables-editor.tsx b/packages/graphiql-react/src/components/variables-editor.tsx index 892836f8a78..08c791c511e 100644 --- a/packages/graphiql-react/src/components/variables-editor.tsx +++ b/packages/graphiql-react/src/components/variables-editor.tsx @@ -23,6 +23,7 @@ interface VariablesEditorProps extends EditorProps { export const VariablesEditor: FC = ({ onEdit, + editorOverrides, ...props }) => { const { setEditor, run, prettifyEditors, mergeQuery } = useGraphiQLActions(); @@ -40,7 +41,7 @@ export const VariablesEditor: FC = ({ uri: `${uriInstanceId}${URI_NAME.variables}`, value: initialVariables, }); - const editor = createEditor(ref, { model }); + const editor = createEditor(ref, { model, ...editorOverrides }); setEditor({ variableEditor: editor }); const disposables = [ editor.addAction({ ...KEY_BINDINGS.runQuery, run }), diff --git a/packages/graphiql-react/src/types.ts b/packages/graphiql-react/src/types.ts index e508d6a2049..5cc90f53e49 100644 --- a/packages/graphiql-react/src/types.ts +++ b/packages/graphiql-react/src/types.ts @@ -17,7 +17,16 @@ import type { } from './stores'; import type { RuleKind } from 'graphql-language-service'; -export type EditorProps = ComponentPropsWithoutRef<'div'>; +export type EditorProps = ComponentPropsWithoutRef<'div'> & { + /** + * for customizing editor options. Here are + * some options that may be useful to some users: + * - suggest: { showWords: false } + * - hover: { above: false } + * - scrollbar: { alwaysConsumeMouseWheel: false } + */ + editorOverrides?: monaco.editor.IStandaloneEditorConstructionOptions; +}; export interface SchemaReference { kind: RuleKind; diff --git a/packages/graphiql/src/GraphiQL.tsx b/packages/graphiql/src/GraphiQL.tsx index 859073808ba..17ee6759be5 100644 --- a/packages/graphiql/src/GraphiQL.tsx +++ b/packages/graphiql/src/GraphiQL.tsx @@ -72,7 +72,7 @@ const GraphiQL_: FC = ({ forcedTheme, confirmCloseTab, className, - + editorOverrides, children, ...props }) => { @@ -111,6 +111,7 @@ const GraphiQL_: FC = ({ forcedTheme, confirmCloseTab, className, + editorOverrides, }; const hasHistoryPlugin = plugins.includes(HISTORY_PLUGIN); const HistoryToUse = hasHistoryPlugin ? HistoryStore : Fragment; @@ -202,6 +203,7 @@ export const GraphiQLInterface: FC = ({ onEditHeaders, responseTooltip, showPersistHeadersSettings, + editorOverrides, }) => { const { addTab, moveTab, closeTab, changeTab, setVisiblePlugin } = useGraphiQLActions(); @@ -359,6 +361,7 @@ export const GraphiQLInterface: FC = ({ ) : ( @@ -427,11 +430,13 @@ export const GraphiQLInterface: FC = ({ {isHeadersEditorEnabled && ( )} @@ -519,7 +524,10 @@ export const GraphiQLInterface: FC = ({ />
{isFetching && } - + {footer}