import styled from '@emotion/styled'; import { Button, ActionIcon, Textarea } from '@mantine/core'; import { useCallback, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { useAppContext } from '../context'; import { useAppDispatch, useAppSelector } from '../store'; import { selectMessage, setMessage } from '../store/message'; import { selectTemperature } from '../store/parameters'; import { openSystemPromptPanel, openTemperaturePanel } from '../store/settings-ui'; const Container = styled.div` background: #292933; border-top: thin solid #393933; padding: 1rem 1rem 0 1rem; .inner { max-width: 50rem; margin: auto; text-align: right; } .settings-button { margin: 0.5rem -0.4rem 0.5rem 1rem; font-size: 0.7rem; color: #999; } `; export declare type OnSubmit = (name?: string) => Promise; function PaperPlaneSubmitButton(props: { onSubmit: any, disabled?: boolean }) { return ( ); } export interface MessageInputProps { disabled?: boolean; } export default function MessageInput(props: MessageInputProps) { const temperature = useAppSelector(selectTemperature); const message = useAppSelector(selectMessage); const context = useAppContext(); const dispatch = useAppDispatch(); const onCustomizeSystemPromptClick = useCallback(() => dispatch(openSystemPromptPanel()), [dispatch]); const onTemperatureClick = useCallback(() => dispatch(openTemperaturePanel()), [dispatch]); const onChange = useCallback((e: React.ChangeEvent) => { dispatch(setMessage(e.target.value)); }, [dispatch]); const pathname = useLocation().pathname; const onSubmit = useCallback(async () => { if (await context.onNewMessage(message)) { dispatch(setMessage('')); } }, [context, message, dispatch]); const onKeyDown = useCallback((e: React.KeyboardEvent) => { if (e.key === 'Enter' && e.shiftKey === false && !props.disabled) { e.preventDefault(); onSubmit(); } }, [onSubmit, props.disabled]); const rightSection = useMemo(() => { return (
); }, [onSubmit, props.disabled]); const messagesToDisplay = context.currentChat.messagesToDisplay; const disabled = context.generating || messagesToDisplay[messagesToDisplay.length - 1]?.role === 'user' || (messagesToDisplay.length > 0 && !messagesToDisplay[messagesToDisplay.length - 1]?.done); const isLandingPage = pathname === '/'; if (context.isShare || (!isLandingPage && !context.id)) { return null; } return