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
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import { Component } from "react";
|
|
import type {
|
|
AgentGUISideConversationPresentation,
|
|
AgentGUISideConversationProjection
|
|
} from "../../../agentSideConversationPresentation";
|
|
|
|
interface AgentGUISideConversationPresentationPublisherProps {
|
|
presentation: AgentGUISideConversationPresentation;
|
|
projection: AgentGUISideConversationProjection | null;
|
|
sourceMismatch: boolean;
|
|
onClose(): Promise<void>;
|
|
}
|
|
|
|
export class AgentGUISideConversationPresentationPublisher extends Component<AgentGUISideConversationPresentationPublisherProps> {
|
|
componentDidMount(): void {
|
|
this.publish();
|
|
}
|
|
|
|
componentDidUpdate(
|
|
previous: AgentGUISideConversationPresentationPublisherProps
|
|
): void {
|
|
if (previous.presentation !== this.props.presentation) {
|
|
previous.presentation.publish(null);
|
|
}
|
|
if (
|
|
previous.presentation !== this.props.presentation ||
|
|
previous.projection !== this.props.projection
|
|
) {
|
|
this.publish();
|
|
} else if (!previous.sourceMismatch && this.props.sourceMismatch) {
|
|
this.closeMismatchedSide();
|
|
}
|
|
}
|
|
|
|
componentWillUnmount(): void {
|
|
this.props.presentation.publish(null);
|
|
}
|
|
|
|
render(): null {
|
|
return null;
|
|
}
|
|
|
|
private publish(): void {
|
|
this.props.presentation.publish(this.props.projection);
|
|
this.closeMismatchedSide();
|
|
}
|
|
|
|
private closeMismatchedSide(): void {
|
|
if (this.props.sourceMismatch) {
|
|
void this.props.onClose().catch(() => {});
|
|
}
|
|
}
|
|
}
|