chat-prompt-input.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { FC } from 'react'
  2. import {
  3. PromptInput,
  4. PromptInputAttachment,
  5. PromptInputAttachments,
  6. PromptInputBody,
  7. PromptInputFooter,
  8. PromptInputHeader,
  9. PromptInputMessage,
  10. PromptInputSubmit,
  11. PromptInputSubmitProps,
  12. PromptInputTextarea,
  13. PromptInputTools,
  14. usePromptInputController,
  15. } from './ai-elements/prompt-input'
  16. export const ChatPromptInput: FC<{
  17. status: PromptInputSubmitProps['status']
  18. onSubmit: (message: PromptInputMessage) => Promise<boolean>
  19. }> = ({ status, onSubmit }) => {
  20. const controller = usePromptInputController()
  21. return (
  22. <PromptInput
  23. onSubmit={async message => {
  24. const result = await onSubmit(message)
  25. if (result) {
  26. controller.textInput.clear()
  27. }
  28. }}
  29. globalDrop
  30. multiple
  31. className="mt-4"
  32. >
  33. <PromptInputHeader>
  34. <PromptInputAttachments>
  35. {attachment => <PromptInputAttachment data={attachment} />}
  36. </PromptInputAttachments>
  37. </PromptInputHeader>
  38. <PromptInputBody>
  39. <PromptInputTextarea />
  40. </PromptInputBody>
  41. <PromptInputFooter>
  42. <PromptInputTools />
  43. <PromptInputSubmit status={status} />
  44. </PromptInputFooter>
  45. </PromptInput>
  46. )
  47. }