feat(kernel): complete tree-first graph tasks 074-080
This commit is contained in:
@@ -6,7 +6,9 @@ describe("useAiAgentUiStore", () => {
|
||||
useAiAgentUiStore.setState({
|
||||
documentAgentAvailable: false,
|
||||
documentAgentOpen: false,
|
||||
documentAgentActivated: false,
|
||||
globalAgentOpen: false,
|
||||
globalAgentActivated: false,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,8 +17,10 @@ describe("useAiAgentUiStore", () => {
|
||||
|
||||
state.toggleGlobalAgentOpen();
|
||||
expect(useAiAgentUiStore.getState().globalAgentOpen).toBe(true);
|
||||
expect(useAiAgentUiStore.getState().globalAgentActivated).toBe(true);
|
||||
|
||||
state.toggleGlobalAgentOpen();
|
||||
expect(useAiAgentUiStore.getState().globalAgentOpen).toBe(false);
|
||||
expect(useAiAgentUiStore.getState().globalAgentActivated).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,8 +4,10 @@ import { create } from "zustand";
|
||||
|
||||
type AiAgentUiState = {
|
||||
globalAgentOpen: boolean;
|
||||
globalAgentActivated: boolean;
|
||||
documentAgentAvailable: boolean;
|
||||
documentAgentOpen: boolean;
|
||||
documentAgentActivated: boolean;
|
||||
setGlobalAgentOpen: (open: boolean) => void;
|
||||
toggleGlobalAgentOpen: () => void;
|
||||
setDocumentAgentAvailable: (available: boolean) => void;
|
||||
@@ -15,18 +17,34 @@ type AiAgentUiState = {
|
||||
|
||||
export const useAiAgentUiStore = create<AiAgentUiState>((set, get) => ({
|
||||
globalAgentOpen: false,
|
||||
globalAgentActivated: false,
|
||||
documentAgentAvailable: false,
|
||||
documentAgentOpen: false,
|
||||
setGlobalAgentOpen: (open) => set({ globalAgentOpen: open }),
|
||||
documentAgentActivated: false,
|
||||
setGlobalAgentOpen: (open) =>
|
||||
set((state) => ({
|
||||
globalAgentOpen: open,
|
||||
globalAgentActivated: state.globalAgentActivated || open,
|
||||
})),
|
||||
toggleGlobalAgentOpen: () => {
|
||||
const s = get();
|
||||
set({ globalAgentOpen: !s.globalAgentOpen });
|
||||
set({
|
||||
globalAgentOpen: !s.globalAgentOpen,
|
||||
globalAgentActivated: s.globalAgentActivated || !s.globalAgentOpen,
|
||||
});
|
||||
},
|
||||
setDocumentAgentAvailable: (available) => set({ documentAgentAvailable: available }),
|
||||
setDocumentAgentOpen: (open) => set({ documentAgentOpen: open }),
|
||||
setDocumentAgentOpen: (open) =>
|
||||
set((state) => ({
|
||||
documentAgentOpen: open,
|
||||
documentAgentActivated: state.documentAgentActivated || open,
|
||||
})),
|
||||
toggleDocumentAgentOpen: () => {
|
||||
const s = get();
|
||||
if (!s.documentAgentAvailable) return;
|
||||
set({ documentAgentOpen: !s.documentAgentOpen });
|
||||
set({
|
||||
documentAgentOpen: !s.documentAgentOpen,
|
||||
documentAgentActivated: s.documentAgentActivated || !s.documentAgentOpen,
|
||||
});
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
"use client";
|
||||
|
||||
import { create } from "zustand";
|
||||
|
||||
type OnlyOfficeAiBridgeState = {
|
||||
pluginReady: boolean;
|
||||
targetOrigin: string;
|
||||
targetWindow: Window | null;
|
||||
lastReadyAt: number | null;
|
||||
captureReady: (payload: { targetOrigin: string; targetWindow: Window | null }) => void;
|
||||
reset: () => void;
|
||||
};
|
||||
|
||||
export const useOnlyOfficeAiBridgeStore = create<OnlyOfficeAiBridgeState>((set) => ({
|
||||
pluginReady: false,
|
||||
targetOrigin: "*",
|
||||
targetWindow: null,
|
||||
lastReadyAt: null,
|
||||
captureReady: ({ targetOrigin, targetWindow }) =>
|
||||
set({
|
||||
pluginReady: Boolean(targetWindow),
|
||||
targetOrigin: targetOrigin || "*",
|
||||
targetWindow,
|
||||
lastReadyAt: Date.now(),
|
||||
}),
|
||||
reset: () =>
|
||||
set({
|
||||
pluginReady: false,
|
||||
targetOrigin: "*",
|
||||
targetWindow: null,
|
||||
lastReadyAt: null,
|
||||
}),
|
||||
}));
|
||||
@@ -14,6 +14,7 @@ export type FilterKey = "titleOnly" | "exact" | "onlyCurrentPage" | "includeOcr"
|
||||
|
||||
interface SearchPaletteState {
|
||||
open: boolean;
|
||||
activated: boolean;
|
||||
mode: SearchPaletteMode;
|
||||
query: string;
|
||||
filters: Omit<DocumentSearchFilters, "timeRange">;
|
||||
@@ -47,6 +48,7 @@ const defaultFilters: Omit<DocumentSearchFilters, "timeRange"> = {
|
||||
|
||||
export const useSearchPaletteStore = create<SearchPaletteState>((set) => ({
|
||||
open: false,
|
||||
activated: false,
|
||||
mode: "search",
|
||||
query: "",
|
||||
filters: { ...defaultFilters },
|
||||
@@ -58,12 +60,14 @@ export const useSearchPaletteStore = create<SearchPaletteState>((set) => ({
|
||||
openSearch: () =>
|
||||
set((state) => ({
|
||||
open: true,
|
||||
activated: true,
|
||||
mode: "search",
|
||||
query: state.query,
|
||||
})),
|
||||
openReference: (options) =>
|
||||
set({
|
||||
open: true,
|
||||
activated: true,
|
||||
mode: "reference",
|
||||
referenceMode: options?.referenceMode ?? "inline",
|
||||
alias: options?.aliasSeed ?? "",
|
||||
|
||||
Reference in New Issue
Block a user