mirror of
https://github.com/infinilabs/coco-app.git
synced 2026-08-29 10:09:30 +02:00
feat: networked search data sources support search and keyboard-only operation (#367)
* feat: networked search data sources support search and keyboard-only operation * docs: update changelog
This commit is contained in:
@@ -1,12 +1,9 @@
|
||||
import { useCallback, useEffect } from "react";
|
||||
import { useKeyPress } from "ahooks";
|
||||
import { useCallback } from "react";
|
||||
|
||||
import SearchChat from "@/components/SearchChat";
|
||||
import platformAdapter from "@/utils/platformAdapter";
|
||||
import { useShortcutsStore } from "@/stores/shortcutsStore";
|
||||
import { useStartupStore } from "@/stores/startupStore";
|
||||
import { modifierKeys } from "@/components/Settings/Advanced/components/Shortcuts";
|
||||
import { useAppStore } from "@/stores/appStore";
|
||||
import { useSyncStore } from "@/hooks/useSyncStore";
|
||||
|
||||
function MainApp() {
|
||||
const setIsTauri = useAppStore((state) => state.setIsTauri);
|
||||
@@ -22,8 +19,8 @@ function MainApp() {
|
||||
queryStrings: { query: input },
|
||||
}
|
||||
);
|
||||
if (!response || typeof response !== 'object') {
|
||||
throw new Error('Invalid response format');
|
||||
if (!response || typeof response !== "object") {
|
||||
throw new Error("Invalid response format");
|
||||
}
|
||||
return response;
|
||||
} catch (error) {
|
||||
@@ -56,124 +53,7 @@ function MainApp() {
|
||||
return platformAdapter.hideWindow();
|
||||
}, []);
|
||||
|
||||
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 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;
|
||||
});
|
||||
const setDeepThinking = useShortcutsStore((state) => {
|
||||
return state.setDeepThinking;
|
||||
});
|
||||
const setInternetSearch = useShortcutsStore((state) => {
|
||||
return state.setInternetSearch;
|
||||
});
|
||||
const setInternetSearchScope = useShortcutsStore((state) => {
|
||||
return state.setInternetSearchScope;
|
||||
});
|
||||
const setHistoricalRecords = useShortcutsStore((state) => {
|
||||
return state.setHistoricalRecords;
|
||||
});
|
||||
const setNewSession = useShortcutsStore((state) => {
|
||||
return state.setNewSession;
|
||||
});
|
||||
const setFixedWindow = useShortcutsStore((state) => {
|
||||
return state.setFixedWindow;
|
||||
});
|
||||
const setServiceList = useShortcutsStore((state) => {
|
||||
return state.setServiceList;
|
||||
});
|
||||
const setExternal = useShortcutsStore((state) => {
|
||||
return state.setExternal;
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
const unListeners = Promise.all([
|
||||
platformAdapter.listenEvent("change-shortcuts-store", ({ payload }) => {
|
||||
const {
|
||||
modifierKey,
|
||||
modeSwitch,
|
||||
returnToInput,
|
||||
voiceInput,
|
||||
addFile,
|
||||
deepThinking,
|
||||
internetSearch,
|
||||
internetSearchScope,
|
||||
historicalRecords,
|
||||
newSession,
|
||||
fixedWindow,
|
||||
serviceList,
|
||||
external,
|
||||
} = payload;
|
||||
setModifierKey(modifierKey);
|
||||
setModeSwitch(modeSwitch);
|
||||
setReturnToInput(returnToInput);
|
||||
setVoiceInput(voiceInput);
|
||||
setAddFile(addFile);
|
||||
setDeepThinking(deepThinking);
|
||||
setInternetSearch(internetSearch);
|
||||
setInternetSearchScope(internetSearchScope);
|
||||
setHistoricalRecords(historicalRecords);
|
||||
setNewSession(newSession);
|
||||
setFixedWindow(fixedWindow);
|
||||
setServiceList(serviceList);
|
||||
setExternal(external);
|
||||
}),
|
||||
|
||||
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"],
|
||||
}
|
||||
);
|
||||
useSyncStore();
|
||||
|
||||
return (
|
||||
<SearchChat
|
||||
|
||||
Reference in New Issue
Block a user