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.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. import { AccessMode } from '@/models/access-control'
  19. export type ChatWithHistoryContextValue = {
  20. appInfoError?: any
  21. appInfoLoading?: boolean
  22. appMeta?: AppMeta
  23. appData?: AppData
  24. accessMode?: AccessMode
  25. userCanAccess?: boolean
  26. appParams?: ChatConfig
  27. appChatListDataLoading?: boolean
  28. currentConversationId: string
  29. currentConversationItem?: ConversationItem
  30. appPrevChatTree: ChatItemInTree[]
  31. pinnedConversationList: AppConversationData['data']
  32. conversationList: AppConversationData['data']
  33. newConversationInputs: Record<string, any>
  34. newConversationInputsRef: RefObject<Record<string, any>>
  35. handleNewConversationInputsChange: (v: Record<string, any>) => void
  36. inputsForms: any[]
  37. handleNewConversation: () => void
  38. handleStartChat: (callback?: any) => void
  39. handleChangeConversation: (conversationId: string) => void
  40. handlePinConversation: (conversationId: string) => void
  41. handleUnpinConversation: (conversationId: string) => void
  42. handleDeleteConversation: (conversationId: string, callback: Callback) => void
  43. conversationRenaming: boolean
  44. handleRenameConversation: (conversationId: string, newName: string, callback: Callback) => void
  45. handleNewConversationCompleted: (newConversationId: string) => void
  46. chatShouldReloadKey: string
  47. isMobile: boolean
  48. isInstalledApp: boolean
  49. appId?: string
  50. handleFeedback: (messageId: string, feedback: Feedback) => void
  51. currentChatInstanceRef: RefObject<{ handleStop: () => void }>
  52. themeBuilder?: ThemeBuilder
  53. sidebarCollapseState?: boolean
  54. handleSidebarCollapse: (state: boolean) => void
  55. clearChatList?: boolean
  56. setClearChatList: (state: boolean) => void
  57. isResponding?: boolean
  58. setIsResponding: (state: boolean) => void,
  59. currentConversationInputs: Record<string, any> | null,
  60. setCurrentConversationInputs: (v: Record<string, any>) => void,
  61. allInputsHidden: boolean,
  62. }
  63. export const ChatWithHistoryContext = createContext<ChatWithHistoryContextValue>({
  64. accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS,
  65. userCanAccess: false,
  66. currentConversationId: '',
  67. appPrevChatTree: [],
  68. pinnedConversationList: [],
  69. conversationList: [],
  70. newConversationInputs: {},
  71. newConversationInputsRef: { current: {} },
  72. handleNewConversationInputsChange: noop,
  73. inputsForms: [],
  74. handleNewConversation: noop,
  75. handleStartChat: noop,
  76. handleChangeConversation: noop,
  77. handlePinConversation: noop,
  78. handleUnpinConversation: noop,
  79. handleDeleteConversation: noop,
  80. conversationRenaming: false,
  81. handleRenameConversation: noop,
  82. handleNewConversationCompleted: noop,
  83. chatShouldReloadKey: '',
  84. isMobile: false,
  85. isInstalledApp: false,
  86. handleFeedback: noop,
  87. currentChatInstanceRef: { current: { handleStop: noop } },
  88. sidebarCollapseState: false,
  89. handleSidebarCollapse: noop,
  90. clearChatList: false,
  91. setClearChatList: noop,
  92. isResponding: false,
  93. setIsResponding: noop,
  94. currentConversationInputs: {},
  95. setCurrentConversationInputs: noop,
  96. allInputsHidden: false,
  97. })
  98. export const useChatWithHistoryContext = () => useContext(ChatWithHistoryContext)