Skip to content

Commit 42283fa

Browse files
authored
fix: support cmd+k to open the search modal (#1755)
Also opens the kapa widget with the AI chat tab first. Closes #1745
1 parent e18bbf8 commit 42283fa

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

apify-docs-theme/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"docusaurus-gtm-plugin": "^0.0.2",
3030
"postcss-preset-env": "^10.1.3",
3131
"prism-react-renderer": "^2.4.1",
32+
"react-hotkeys-hook": "^5.1.0",
3233
"remark-parse": "^11.0.0",
3334
"remark-stringify": "^11.0.0",
3435
"unified": "^11.0.5",

apify-docs-theme/src/theme/SearchBar/index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import RouterLink from '@docusaurus/Link';
44
// import { useHistory, useLocation } from '@docusaurus/router';
55
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
66
import clsx from 'clsx';
7-
// import React, { useCallback } from 'react';
87
import React, { useEffect, useState } from 'react';
8+
import { useHotkeys } from 'react-hotkeys-hook';
99

1010
// import { ApifySearch } from '@apify/docs-search-modal';
1111
import { ControlKeyIcon, SearchIcon } from '@apify/docs-search-modal/dist/utils/icons';
@@ -82,6 +82,7 @@ export function Link(props) {
8282

8383
export default function SearchBar({ onClick }) {
8484
const [variant, setVariant] = useState(null);
85+
const [opened, setOpened] = useState(false);
8586
const { siteConfig } = useDocusaurusContext();
8687
const { inkeepApiKey } = siteConfig.customFields;
8788

@@ -98,9 +99,18 @@ export default function SearchBar({ onClick }) {
9899
}, []);
99100

100101
onClick = () => {
102+
if (opened) {
103+
return;
104+
}
105+
106+
setOpened(true);
107+
101108
if (variant === 'kapa') {
102109
if (window.Kapa && typeof window.Kapa.open === 'function') {
103110
window.Kapa.open();
111+
window.Kapa('onModalClose', () => {
112+
setOpened(false);
113+
});
104114
} else {
105115
console.error('Kapa.ai widget is not available.');
106116
}
@@ -178,11 +188,13 @@ export default function SearchBar({ onClick }) {
178188
},
179189
],
180190
},
191+
defaultView: 'chat',
181192
};
182193
const modal = window.Inkeep.ModalSearchAndChat(config);
183194

184195
function handleOpenChange(newOpen) {
185196
modal.update({ modalSettings: { isOpen: newOpen } });
197+
setOpened(newOpen);
186198
}
187199

188200
modal.update({ modalSettings: { isOpen: true } });
@@ -200,6 +212,10 @@ export default function SearchBar({ onClick }) {
200212
}
201213
}, []);
202214

215+
useHotkeys('mod+k, /', () => {
216+
onClick();
217+
}, { preventDefault: true });
218+
203219
return (
204220
<BrowserOnly>
205221
{() => (

package-lock.json

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)