Files
tutti/packages/agent/gui/agent-gui/agentGuiNode/composer/useComposerDraftConnectorSelection.ts
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

58 lines
1.8 KiB
TypeScript

import { useCallback } from "react";
import type { AgentComposerDraft } from "../model/agentGuiNodeTypes";
import {
agentComposerDraftConnectors,
updateAgentComposerDraft
} from "../model/agentComposerDraft";
type UpdateScopedDraft = (
sourceScopeKey: string,
update: (current: AgentComposerDraft) => AgentComposerDraft
) => AgentComposerDraft | null;
export function useDraftConnectorSelection(
draftScopeKey: string,
updateScopedDraft: UpdateScopedDraft
) {
const removeDraftConnector = useCallback(
(connectorKey: string): void => {
updateScopedDraft(draftScopeKey, (currentDraft) =>
updateAgentComposerDraft(currentDraft, {
connectors: agentComposerDraftConnectors(currentDraft).filter(
(connector) => connector.connectorKey !== connectorKey
)
})
);
},
[draftScopeKey, updateScopedDraft]
);
const setDraftConnectorSelected = useCallback(
(connectorKey: string, selected: boolean): void => {
const normalizedConnectorKey = connectorKey.trim();
if (!normalizedConnectorKey) {
return;
}
updateScopedDraft(draftScopeKey, (currentDraft) => {
const connectors = agentComposerDraftConnectors(currentDraft);
const alreadySelected = connectors.some(
(connector) => connector.connectorKey === normalizedConnectorKey
);
if (alreadySelected === selected) {
return currentDraft;
}
return updateAgentComposerDraft(currentDraft, {
connectors: selected
? [...connectors, { connectorKey: normalizedConnectorKey }]
: connectors.filter(
(connector) => connector.connectorKey !== normalizedConnectorKey
)
});
});
},
[draftScopeKey, updateScopedDraft]
);
return { removeDraftConnector, setDraftConnectorSelected };
}