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
58 lines
1.8 KiB
TypeScript
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 };
|
|
}
|