mirror of
https://github.com/infinilabs/coco-app.git
synced 2026-08-29 10:09:30 +02:00
feat: supports keyboard shortcuts with immediate effect (#316)
* feat: supports keyboard shortcuts with immediate effect * feat: customize mode switching shortcuts * refactor: remove the shift * fix: voice input audio input device number anomaly issue * feat: support for changing the focus state of the input box * refactor: shortcuts for handling input box focus separately * feat: upload file support shortcuts * refactor: the connection timeout is specified with the variable * refactor: shortcut keys to modify the input box before displaying modifier keys * docs: update changelog * style: remove useless import * refactor: window focus changes modifier key press status to false * refactor: correcting errors of judgment * docs: update changelog
This commit is contained in:
@@ -1,16 +1,23 @@
|
||||
import { useCallback } from "react";
|
||||
import { useCallback, useEffect } from "react";
|
||||
|
||||
import SearchChat from "@/pages/web/SearchChat";
|
||||
import platformAdapter from "@/utils/platformAdapter";
|
||||
import { useShortcutsStore } from "@/stores/shortcutsStore";
|
||||
import { useStartupStore } from "@/stores/startupStore";
|
||||
import { useKeyPress } from "ahooks";
|
||||
import { modifierKeys } from "@/components/Settings/Advanced/components/Shortcuts";
|
||||
|
||||
function MainApp() {
|
||||
const querySearch = useCallback(async (input: string) => {
|
||||
try {
|
||||
const response: any = await platformAdapter.invokeBackend("query_coco_fusion", {
|
||||
from: 0,
|
||||
size: 10,
|
||||
queryStrings: { query: input },
|
||||
});
|
||||
const response: any = await platformAdapter.invokeBackend(
|
||||
"query_coco_fusion",
|
||||
{
|
||||
from: 0,
|
||||
size: 10,
|
||||
queryStrings: { query: input },
|
||||
}
|
||||
);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error("query_coco_fusion error:", error);
|
||||
@@ -21,11 +28,14 @@ function MainApp() {
|
||||
const queryDocuments = useCallback(
|
||||
async (from: number, size: number, queryStrings: any) => {
|
||||
try {
|
||||
const response: any = await platformAdapter.invokeBackend("query_coco_fusion", {
|
||||
from,
|
||||
size,
|
||||
queryStrings,
|
||||
});
|
||||
const response: any = await platformAdapter.invokeBackend(
|
||||
"query_coco_fusion",
|
||||
{
|
||||
from,
|
||||
size,
|
||||
queryStrings,
|
||||
}
|
||||
);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error("query_coco_fusion error:", error);
|
||||
@@ -34,13 +44,92 @@ function MainApp() {
|
||||
},
|
||||
[]
|
||||
);
|
||||
const modifierKey = useShortcutsStore((state) => {
|
||||
return state.modifierKey;
|
||||
});
|
||||
const setModifierKey = useShortcutsStore((state) => {
|
||||
return state.setModifierKey;
|
||||
});
|
||||
const setModifierKeyPressed = useShortcutsStore((state) => {
|
||||
return state.setModifierKeyPressed;
|
||||
});
|
||||
const setModeSwitch = useShortcutsStore((state) => {
|
||||
return state.setModeSwitch;
|
||||
});
|
||||
const setReturnToInput = useShortcutsStore((state) => {
|
||||
return state.setReturnToInput;
|
||||
});
|
||||
const setVoiceInput = useShortcutsStore((state) => {
|
||||
return state.setVoiceInput;
|
||||
});
|
||||
const setAddImage = useShortcutsStore((state) => {
|
||||
return state.setAddImage;
|
||||
});
|
||||
const setAddFile = useShortcutsStore((state) => {
|
||||
return state.setAddFile;
|
||||
});
|
||||
const setDefaultStartupWindow = useStartupStore((state) => {
|
||||
return state.setDefaultStartupWindow;
|
||||
});
|
||||
const setDefaultContentForSearchWindow = useStartupStore((state) => {
|
||||
return state.setDefaultContentForSearchWindow;
|
||||
});
|
||||
const setDefaultContentForChatWindow = useStartupStore((state) => {
|
||||
return state.setDefaultContentForChatWindow;
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
const unListeners = Promise.all([
|
||||
platformAdapter.listenEvent("change-shortcuts-store", ({ payload }) => {
|
||||
const {
|
||||
modifierKey,
|
||||
modeSwitch,
|
||||
returnToInput,
|
||||
voiceInput,
|
||||
addImage,
|
||||
addFile,
|
||||
} = payload;
|
||||
setModifierKey(modifierKey);
|
||||
setModeSwitch(modeSwitch);
|
||||
setReturnToInput(returnToInput);
|
||||
setVoiceInput(voiceInput);
|
||||
setAddImage(addImage);
|
||||
setAddFile(addFile);
|
||||
}),
|
||||
|
||||
platformAdapter.listenEvent("change-startup-store", ({ payload }) => {
|
||||
const {
|
||||
defaultStartupWindow,
|
||||
defaultContentForSearchWindow,
|
||||
defaultContentForChatWindow,
|
||||
} = payload;
|
||||
setDefaultStartupWindow(defaultStartupWindow);
|
||||
setDefaultContentForSearchWindow(defaultContentForSearchWindow);
|
||||
setDefaultContentForChatWindow(defaultContentForChatWindow);
|
||||
}),
|
||||
]);
|
||||
|
||||
return () => {
|
||||
unListeners.then((fns) => {
|
||||
fns.forEach((fn) => fn());
|
||||
});
|
||||
};
|
||||
}, []);
|
||||
|
||||
useKeyPress(
|
||||
modifierKeys,
|
||||
(event, key) => {
|
||||
if (key === modifierKey) {
|
||||
setModifierKeyPressed(event.type === "keydown");
|
||||
}
|
||||
},
|
||||
{
|
||||
events: ["keydown", "keyup"],
|
||||
}
|
||||
);
|
||||
|
||||
return (
|
||||
<SearchChat
|
||||
querySearch={querySearch}
|
||||
queryDocuments={queryDocuments}
|
||||
/>
|
||||
<SearchChat querySearch={querySearch} queryDocuments={queryDocuments} />
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user