You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

context.tsx 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. 'use client'
  2. import type { RefObject } from 'react'
  3. import { createContext, useContext } from 'use-context-selector'
  4. import type {
  5. Callback,
  6. ChatConfig,
  7. ChatItemInTree,
  8. Feedback,
  9. } from '../types'
  10. import type { ThemeBuilder } from '../embedded-chatbot/theme/theme-context'
  11. import type {
  12. AppConversationData,
  13. AppData,
  14. AppMeta,
  15. ConversationItem,
  16. } from '@/models/share'
  17. import { noop } from 'lodash-es'
  18. export type ChatWithHistoryContextValue = {
  19. appMeta?: AppMeta | null
  20. appData?: AppData | null
  21. appParams?: ChatConfig
  22. appChatListDataLoading?: boolean
  23. currentConversationId: string
  24. currentConversationItem?: ConversationItem
  25. appPrevChatTree: ChatItemInTree[]
  26. pinnedConversationList: AppConversationData['data']
  27. conversationList: AppConversationData['data']
  28. newConversationInputs: Record<string, any>
  29. newConversationInputsRef: RefObject<Record<string, any>>
  30. handleNewConversationInputsChange: (v: Record<string, any>) => void
  31. inputsForms: any[]
  32. handleNewConversation: () => void
  33. handleStartChat: (callback?: any) => void
  34. handleChangeConversation: (conversationId: string) => void
  35. handlePinConversation: (conversationId: string) => void
  36. handleUnpinConversation: (conversationId: string) => void
  37. handleDeleteConversation: (conversationId: string, callback: Callback) => void
  38. conversationRenaming: boolean
  39. handleRenameConversation: (conversationId: string, newName: string, callback: Callback) => void
  40. handleNewConversationCompleted: (newConversationId: string) => void
  41. chatShouldReloadKey: string
  42. isMobile: boolean
  43. isInstalledApp: boolean
  44. appId?: string
  45. handleFeedback: (messageId: string, feedback: Feedback) => void
  46. currentChatInstanceRef: RefObject<{ handleStop: () => void }>
  47. themeBuilder?: ThemeBuilder
  48. sidebarCollapseState?: boolean
  49. handleSidebarCollapse: (state: boolean) => void
  50. clearChatList?: boolean
  51. setClearChatList: (state: boolean) => void
  52. isResponding?: boolean
  53. setIsResponding: (state: boolean) => void,
  54. currentConversationInputs: Record<string, any> | null,
  55. setCurrentConversationInputs: (v: Record<string, any>) => void,
  56. allInputsHidden: boolean,
  57. }
  58. export const ChatWithHistoryContext = createContext<ChatWithHistoryContextValue>({
  59. currentConversationId: '',
  60. appPrevChatTree: [],
  61. pinnedConversationList: [],
  62. conversationList: [],
  63. newConversationInputs: {},
  64. newConversationInputsRef: { current: {} },
  65. handleNewConversationInputsChange: noop,
  66. inputsForms: [],
  67. handleNewConversation: noop,
  68. handleStartChat: noop,
  69. handleChangeConversation: noop,
  70. handlePinConversation: noop,
  71. handleUnpinConversation: noop,
  72. handleDeleteConversation: noop,
  73. conversationRenaming: false,
  74. handleRenameConversation: noop,
  75. handleNewConversationCompleted: noop,
  76. chatShouldReloadKey: '',
  77. isMobile: false,
  78. isInstalledApp: false,
  79. handleFeedback: noop,
  80. currentChatInstanceRef: { current: { handleStop: noop } },
  81. sidebarCollapseState: false,
  82. handleSidebarCollapse: noop,
  83. clearChatList: false,
  84. setClearChatList: noop,
  85. isResponding: false,
  86. setIsResponding: noop,
  87. currentConversationInputs: {},
  88. setCurrentConversationInputs: noop,
  89. allInputsHidden: false,
  90. })
  91. export const useChatWithHistoryContext = () => useContext(ChatWithHistoryContext)