Skip to content

Commit 7846ed7

Browse files
ankit7201pwizla
andauthored
Added disabled option for LiveEditor so that it does not steal focus - Closes #2409 (#2423)
* Added disabled option for LiveEditor so that it does not steal focus from endpoint textbox after every character input * Removed useRef usage for div wrapper for LiveEditor --------- Co-authored-by: Pierre Wizla <[email protected]>
1 parent 3baed14 commit 7846ed7

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

docusaurus/src/components/InteractiveQueryBuilder/InteractiveQueryBuilder.jsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import qs from 'qs';
22
import clsx from 'clsx';
3-
import React, { useCallback, useEffect, useLayoutEffect, useState } from 'react';
3+
import React, { useCallback, useEffect, useLayoutEffect, useState, useRef } from 'react';
44
import { LiveEditor, LiveError, LivePreview, LiveProvider } from 'react-live';
55
import { usePrismTheme } from '@docusaurus/theme-common';
66
import { Button } from '../Button/Button';
@@ -20,6 +20,7 @@ export function InteractiveQueryBuilder({
2020
const [endpoint, setEndpoint] = useState(inheritEndpoint);
2121
const [queryString, setQueryString] = useState('');
2222
const [clipboardStatus, setClipboardStatus] = useState('');
23+
const [isEditorDisabled, setIsEditorDisabled] = useState(true);
2324

2425
/**
2526
* Copy to Clipboard
@@ -62,6 +63,14 @@ export function InteractiveQueryBuilder({
6263
setEndpoint(endpointChangedBeforeByUser);
6364
}, [localStorageKey]);
6465

66+
const handleEditorFocus = useCallback(() => {
67+
setIsEditorDisabled(false);
68+
}, []);
69+
70+
const handleEditorBlur = useCallback(() => {
71+
setIsEditorDisabled(true);
72+
}, []);
73+
6574
return (
6675
<form
6776
noValidate
@@ -114,11 +123,18 @@ export function InteractiveQueryBuilder({
114123
label="Endpoint Query Parameters:"
115124
hint="Feel free to modify the code above."
116125
>
117-
<LiveEditor
118-
className={clsx(styles.iqb__editor)}
119-
code={code}
120-
onChange={setCode}
121-
/>
126+
<div
127+
onBlur={() => handleEditorBlur()}
128+
onClick={() => handleEditorFocus()}
129+
style={{ cursor: 'text' }}
130+
>
131+
<LiveEditor
132+
className={clsx(styles.iqb__editor)}
133+
code={code}
134+
onChange={setCode}
135+
disabled={isEditorDisabled}
136+
/>
137+
</div>
122138
</FormField>
123139
<LiveError />
124140
<LivePreview />

0 commit comments

Comments
 (0)