09e1684300
## Summary Replaces the static "Ask AI" header in the command menu with the conversation’s auto-generated title once it’s set after the first message. ## Changes - **Backend:** Title is generated after the first user message (existing behavior). - **Frontend:** After the first stream completes, we fetch the thread title and sync it to: - `currentAIChatThreadTitleState` (persists across command menu close/reopen) - Command menu page info and navigation stack (so the title survives back navigation) - **Entry points:** Opening Ask AI from the left nav or command center uses the same title resolution (explicit `pageTitle` → current thread title → "Ask AI" fallback). - **Race fix:** Title sync only runs when the thread that finished streaming is still the active thread, so switching threads mid-stream doesn’t overwrite the current thread’s title. --------- Co-authored-by: Félix Malfait <felix@twenty.com> Co-authored-by: Cursor <cursoragent@cursor.com>
26 lines
776 B
TypeScript
26 lines
776 B
TypeScript
import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState';
|
|
import styled from '@emotion/styled';
|
|
import { t } from '@lingui/core/macro';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { OverflowingTextWithTooltip } from 'twenty-ui/display';
|
|
|
|
const StyledPageTitle = styled.div`
|
|
color: ${({ theme }) => theme.font.color.primary};
|
|
font-size: ${({ theme }) => theme.font.size.sm};
|
|
font-weight: ${({ theme }) => theme.font.weight.semiBold};
|
|
`;
|
|
|
|
export const CommandMenuAskAIInfo = () => {
|
|
const currentAIChatThreadTitle = useRecoilValue(
|
|
currentAIChatThreadTitleState,
|
|
);
|
|
|
|
return (
|
|
<StyledPageTitle>
|
|
<OverflowingTextWithTooltip
|
|
text={currentAIChatThreadTitle ?? t`Ask AI`}
|
|
/>
|
|
</StyledPageTitle>
|
|
);
|
|
};
|