選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

context.tsx 2.8KB

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