Files
AgentCompany/src/renderer/state/slices/communication.ts
T
2026-04-04 12:03:50 -04:00

63 lines
1.7 KiB
TypeScript

import type { StateCreator } from "zustand";
import type { AgentMessageRecord } from "@shared/types";
import type { AppState } from "../store";
export interface CommunicationSlice {
searchQuery: string;
searchScope: "global" | "channel";
searchResults: AgentMessageRecord[];
searchLoading: boolean;
searchRequestId: number;
activeThreadId: string | null;
setSearchQuery: (query: string) => void;
setSearchScope: (scope: "global" | "channel") => void;
setSearchResults: (results: AgentMessageRecord[], requestId: number) => void;
setSearchLoading: (loading: boolean) => void;
clearSearch: () => void;
setActiveThreadId: (id: string | null) => void;
}
export const createCommunicationSlice: StateCreator<
AppState,
[["zustand/immer", never]],
[],
CommunicationSlice
> = (set) => ({
searchQuery: "",
searchScope: "global",
searchResults: [],
searchLoading: false,
searchRequestId: 0,
activeThreadId: null,
setSearchQuery: (query) =>
set((state) => {
state.searchQuery = query;
state.searchRequestId += 1;
}),
setSearchScope: (scope) =>
set((state) => {
state.searchScope = scope;
}),
setSearchResults: (results, requestId) =>
set((state) => {
if (requestId === state.searchRequestId) {
state.searchResults = results;
state.searchLoading = false;
}
}),
setSearchLoading: (loading) =>
set((state) => {
state.searchLoading = loading;
}),
clearSearch: () =>
set((state) => {
state.searchQuery = "";
state.searchResults = [];
state.searchLoading = false;
}),
setActiveThreadId: (id) =>
set((state) => {
state.activeThreadId = id;
}),
});