mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-16 11:37:47 +01:00
fix: automatic update of service list (#913)
* fix: automatic update of service list * docs: add release note
This commit is contained in:
@@ -17,6 +17,8 @@ feat: support switching groups via keyboard shortcuts #911
|
||||
|
||||
### 🐛 Bug fix
|
||||
|
||||
fix: automatic update of service list #913
|
||||
|
||||
### ✈️ Improvements
|
||||
|
||||
refactor: improve sorting logic of search results #910
|
||||
|
||||
@@ -30,19 +30,23 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) {
|
||||
const setCurrentAssistant = useConnectStore((state) => {
|
||||
return state.setCurrentAssistant;
|
||||
});
|
||||
const assistantList = useConnectStore((state) => state.assistantList);
|
||||
|
||||
const aiAssistant = useShortcutsStore((state) => state.aiAssistant);
|
||||
|
||||
const [assistants, setAssistants] = useState<any[]>([]);
|
||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||
const popoverRef = useRef<HTMLDivElement>(null);
|
||||
const popoverButtonRef = useRef<HTMLButtonElement>(null);
|
||||
const searchInputRef = useRef<HTMLInputElement>(null);
|
||||
const [keyword, setKeyword] = useState("");
|
||||
|
||||
const debounceKeyword = useDebounce(keyword, { wait: 500 });
|
||||
|
||||
const askAiAssistantId = useSearchStore((state) => state.askAiAssistantId);
|
||||
const setAskAiAssistantId = useSearchStore((state) => {
|
||||
return state.setAskAiAssistantId;
|
||||
});
|
||||
const assistantList = useConnectStore((state) => state.assistantList);
|
||||
|
||||
const { fetchAssistant } = AssistantFetcher({
|
||||
debounceKeyword,
|
||||
|
||||
@@ -18,7 +18,10 @@ import StatusIndicator from "@/components/Cloud/StatusIndicator";
|
||||
import { useAuthStore } from "@/stores/authStore";
|
||||
import { useSearchStore } from "@/stores/searchStore";
|
||||
import { useServers } from "@/hooks/useServers";
|
||||
import { getCurrentWindowService, setCurrentWindowService } from "@/commands/windowService";
|
||||
import {
|
||||
getCurrentWindowService,
|
||||
setCurrentWindowService,
|
||||
} from "@/commands/windowService";
|
||||
|
||||
interface ServerListProps {
|
||||
clearChat: () => void;
|
||||
@@ -33,10 +36,9 @@ export function ServerList({ clearChat }: ServerListProps) {
|
||||
);
|
||||
const setEndpoint = useAppStore((state) => state.setEndpoint);
|
||||
const isTauri = useAppStore((state) => state.isTauri);
|
||||
|
||||
const currentService = useConnectStore((state) => state.currentService);
|
||||
const cloudSelectService = useConnectStore((state) => {
|
||||
return state.cloudSelectService;
|
||||
});
|
||||
const serverList = useConnectStore((state) => state.serverList);
|
||||
|
||||
const { setMessages } = useChatStore();
|
||||
|
||||
@@ -55,7 +57,6 @@ export function ServerList({ clearChat }: ServerListProps) {
|
||||
const serverListButtonRef = useRef<HTMLButtonElement>(null);
|
||||
|
||||
const { refreshServerList } = useServers();
|
||||
const serverList = useConnectStore((state) => state.serverList);
|
||||
|
||||
const switchServer = async (server: IServer) => {
|
||||
if (!server) return;
|
||||
@@ -95,8 +96,10 @@ export function ServerList({ clearChat }: ServerListProps) {
|
||||
} else {
|
||||
switchServer(enabledServers[enabledServers.length - 1]);
|
||||
}
|
||||
} else {
|
||||
setCurrentWindowService({});
|
||||
}
|
||||
}, [currentService?.id, cloudSelectService?.id, serverList]);
|
||||
}, [serverList]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!askAiServerId || serverList.length === 0) return;
|
||||
|
||||
@@ -37,8 +37,6 @@ const SessionFile = (props: SessionFileProps) => {
|
||||
|
||||
const getUploadedFiles = async () => {
|
||||
if (isTauri) {
|
||||
console.log("sessionId", sessionId);
|
||||
|
||||
const response: any = await platformAdapter.commands(
|
||||
"get_attachment_by_ids",
|
||||
{
|
||||
|
||||
@@ -107,7 +107,7 @@ const AskAi: FC<AskAiProps> = (props) => {
|
||||
unlisten.current = await platformAdapter.listenEvent(
|
||||
"quick-ai-access-client-id",
|
||||
({ payload }) => {
|
||||
console.log("ask_ai", JSON.parse(payload));
|
||||
// console.log("ask_ai", JSON.parse(payload));
|
||||
|
||||
const chunkData = JSON.parse(payload);
|
||||
|
||||
|
||||
@@ -11,10 +11,6 @@ import {
|
||||
|
||||
export const useServers = () => {
|
||||
const setServerList = useConnectStore((state) => state.setServerList);
|
||||
const currentService = useConnectStore((state) => state.currentService);
|
||||
const cloudSelectService = useConnectStore((state) => {
|
||||
return state.cloudSelectService;
|
||||
});
|
||||
|
||||
const getAllServerList = async () => {
|
||||
try {
|
||||
@@ -73,7 +69,7 @@ export const useServers = () => {
|
||||
await setCurrentWindowService({ ...service, enabled });
|
||||
await getAllServerList();
|
||||
},
|
||||
[currentService, cloudSelectService]
|
||||
[]
|
||||
);
|
||||
|
||||
const removeServer = useCallback(
|
||||
@@ -81,7 +77,7 @@ export const useServers = () => {
|
||||
await platformAdapter.commands("remove_coco_server", id);
|
||||
await getAllServerList();
|
||||
},
|
||||
[currentService?.id, cloudSelectService?.id]
|
||||
[]
|
||||
);
|
||||
|
||||
const logoutServer = useCallback(async (id: string) => {
|
||||
@@ -92,7 +88,7 @@ export const useServers = () => {
|
||||
|
||||
useEffect(() => {
|
||||
getAllServerList();
|
||||
}, [currentService?.enabled, cloudSelectService?.enabled]);
|
||||
}, []);
|
||||
|
||||
return {
|
||||
getAllServerList,
|
||||
|
||||
@@ -117,7 +117,8 @@ export const useSyncStore = () => {
|
||||
const setShowTooltip = useAppStore((state) => state.setShowTooltip);
|
||||
const setEndpoint = useAppStore((state) => state.setEndpoint);
|
||||
const setLanguage = useAppStore((state) => state.setLanguage);
|
||||
const { setCurrentService } = useConnectStore();
|
||||
|
||||
const setServerListSilently = useConnectStore((state) => state.setServerListSilently);
|
||||
|
||||
useEffect(() => {
|
||||
if (!resetFixedWindow) {
|
||||
@@ -185,7 +186,6 @@ export const useSyncStore = () => {
|
||||
connectionTimeout,
|
||||
querySourceTimeout,
|
||||
allowSelfSignature,
|
||||
currentService,
|
||||
} = payload;
|
||||
if (isNumber(connectionTimeout)) {
|
||||
setConnectionTimeout(connectionTimeout);
|
||||
@@ -194,7 +194,6 @@ export const useSyncStore = () => {
|
||||
setQueryTimeout(querySourceTimeout);
|
||||
}
|
||||
setAllowSelfSignature(allowSelfSignature);
|
||||
setCurrentService(currentService);
|
||||
}),
|
||||
|
||||
platformAdapter.listenEvent("change-appearance-store", ({ payload }) => {
|
||||
@@ -235,6 +234,10 @@ export const useSyncStore = () => {
|
||||
setEndpoint(endpoint);
|
||||
setLanguage(language);
|
||||
}),
|
||||
|
||||
platformAdapter.listenEvent("server-list-changed", ({ payload }) => {
|
||||
setServerListSilently(payload);
|
||||
}),
|
||||
]);
|
||||
|
||||
return () => {
|
||||
|
||||
@@ -15,6 +15,7 @@ type keyArrayObject = {
|
||||
export type IConnectStore = {
|
||||
serverList: Server[];
|
||||
setServerList: (servers: Server[]) => void;
|
||||
setServerListSilently: (servers: Server[]) => void;
|
||||
currentService: Server;
|
||||
setCurrentService: (service: Server) => void;
|
||||
cloudSelectService: Server;
|
||||
@@ -44,7 +45,15 @@ export const useConnectStore = create<IConnectStore>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
serverList: [],
|
||||
setServerList: (serverList: Server[]) => {
|
||||
setServerList: async(serverList: Server[]) => {
|
||||
set(
|
||||
produce((draft) => {
|
||||
draft.serverList = serverList;
|
||||
})
|
||||
);
|
||||
await platformAdapter.emitEvent("server-list-changed", serverList);
|
||||
},
|
||||
setServerListSilently: (serverList: Server[]) => {
|
||||
set(
|
||||
produce((draft) => {
|
||||
draft.serverList = serverList;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { AppTheme } from "@/types/index";
|
||||
import { SearchDocument } from "./search";
|
||||
import { IAppStore } from "@/stores/appStore";
|
||||
import { ExtensionPermission } from "@/components/Settings/Extensions";
|
||||
import type { Server } from "@/types/server";
|
||||
|
||||
export interface EventPayloads {
|
||||
"theme-changed": string;
|
||||
@@ -49,6 +50,7 @@ export interface EventPayloads {
|
||||
oauth_success: any;
|
||||
extension_install_success: any;
|
||||
"open_view_extension": [string, ExtensionPermission];
|
||||
"server-list-changed": Server[];
|
||||
}
|
||||
|
||||
// Window operation interface
|
||||
|
||||
Reference in New Issue
Block a user