c596a5e342
## Description Promotes the next-gen UI library (formerly `twenty-new-ui`) to the name **`twenty-ui`** (v0.1.0, publishable) and renames the old package to **`twenty-ui-deprecated`**. Rewrites ~1,730 `twenty-ui` imports → `twenty-ui-deprecated`, updates all configs/CI/Docker/deps, and migrates twenty-front's `Toggle` to the new package (first consumer) as a drop-in. ## Next steps - Wire the `ui/v*` publish dispatch (`cd-deploy-tag.yaml` + `.yarnrc.yml`), then tag `ui/v0.1.0` to publish. - Continue migrating components from `twenty-ui-deprecated` → `twenty-ui`.
52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
import { AGENT_CHAT_STOP_EVENT_NAME } from '@/ai/constants/AgentChatStopEventName';
|
|
import { agentChatInputIsEmptySelector } from '@/ai/states/selectors/agentChatInputIsEmptySelector';
|
|
import { agentChatIsLoadingState } from '@/ai/states/agentChatIsLoadingState';
|
|
import { agentChatIsStreamingComponentFamilyState } from '@/ai/states/agentChatIsStreamingComponentFamilyState';
|
|
import { currentAiChatThreadState } from '@/ai/states/currentAiChatThreadState';
|
|
import { dispatchBrowserEvent } from '@/browser-event/utils/dispatchBrowserEvent';
|
|
import { useAtomComponentFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue';
|
|
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
|
import { IconArrowUp, IconPlayerStop } from 'twenty-ui-deprecated/display';
|
|
import { RoundedIconButton } from 'twenty-ui-deprecated/input';
|
|
|
|
type SendMessageButtonProps = {
|
|
onSend: () => void;
|
|
};
|
|
|
|
export const SendMessageButton = ({ onSend }: SendMessageButtonProps) => {
|
|
const agentChatInputIsEmpty = useAtomStateValue(
|
|
agentChatInputIsEmptySelector,
|
|
);
|
|
|
|
const agentChatIsLoading = useAtomStateValue(agentChatIsLoadingState);
|
|
|
|
const currentAiChatThread = useAtomStateValue(currentAiChatThreadState);
|
|
const agentChatIsStreaming = useAtomComponentFamilyStateValue(
|
|
agentChatIsStreamingComponentFamilyState,
|
|
{ threadId: currentAiChatThread },
|
|
);
|
|
|
|
const handleStopClick = () => {
|
|
dispatchBrowserEvent(AGENT_CHAT_STOP_EVENT_NAME);
|
|
};
|
|
|
|
if (agentChatIsStreaming) {
|
|
return (
|
|
<RoundedIconButton
|
|
Icon={IconPlayerStop}
|
|
size="medium"
|
|
onClick={handleStopClick}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<RoundedIconButton
|
|
Icon={IconArrowUp}
|
|
size="medium"
|
|
onClick={onSend}
|
|
disabled={agentChatInputIsEmpty || agentChatIsLoading}
|
|
/>
|
|
);
|
|
};
|