{"version":3,"file":"useChat.mjs","sources":["../../../../pro-components/chat/chat-engine/hooks/useChat.ts"],"sourcesContent":["import { ref, onMounted, onUnmounted, watch, type Ref } from 'vue';\nimport type { ChatMessagesData, ChatStatus, ChatServiceConfig } from 'tdesign-web-components/lib/chat-engine';\nimport { TdChatProps } from 'tdesign-web-components';\nimport ChatEngine from 'tdesign-web-components/lib/chat-engine';\n\nexport const useChat = (options: {\n  defaultMessages: TdChatProps['defaultMessages'];\n  chatServiceConfig: ChatServiceConfig;\n}) => {\n  const messages: Ref<ChatMessagesData[]> = ref([]);\n  const status: Ref<ChatStatus> = ref('idle');\n  const chatEngineRef = ref<ChatEngine | null>(null);\n  const msgSubscribeRef = ref<(() => void) | null>(null);\n  const prevInitialMessages = ref<ChatMessagesData[]>([]);\n\n  const syncState = (state: ChatMessagesData[]) => {\n    messages.value = state;\n    status.value = state[state.length - 1]?.status || 'idle';\n  };\n\n  const subscribeToChat = () => {\n    if (!chatEngineRef.value) return;\n\n    msgSubscribeRef.value = chatEngineRef.value.messageStore.subscribe((state) => {\n      syncState(state.messages);\n    });\n  };\n\n  const initChat = () => {\n    chatEngineRef.value = new ChatEngine();\n    chatEngineRef.value.init(options.chatServiceConfig, options.defaultMessages);\n    syncState(options.defaultMessages || []);\n    subscribeToChat();\n  };\n\n  onMounted(() => {\n    initChat();\n  });\n\n  onUnmounted(() => {\n    if (msgSubscribeRef.value) {\n      msgSubscribeRef.value();\n    }\n  });\n\n  // 监听 defaultMessages 变化\n  watch(\n    () => options.defaultMessages,\n    (newMessages) => {\n      // 检查 defaultMessages 是否真的发生了变化\n      const hasChanged = JSON.stringify(prevInitialMessages.value) !== JSON.stringify(newMessages);\n\n      if (hasChanged && newMessages && newMessages.length > 0) {\n        // 更新引用\n        prevInitialMessages.value = newMessages;\n\n        // 重新初始化聊天引擎或更新消息\n        if (chatEngineRef.value) {\n          chatEngineRef.value.setMessages(newMessages, 'replace');\n\n          // 同步状态\n          syncState(newMessages);\n        }\n      }\n    },\n    { deep: true },\n  );\n\n  return {\n    chatEngine: chatEngineRef,\n    messages,\n    status,\n  };\n};\n"],"names":["useChat","options","messages","ref","status","chatEngineRef","msgSubscribeRef","prevInitialMessages","syncState","state","_state","value","length","subscribeToChat","messageStore","subscribe","initChat","ChatEngine","init","chatServiceConfig","defaultMessages","onMounted","onUnmounted","watch","newMessages","hasChanged","JSON","stringify","setMessages","deep","chatEngine"],"mappings":";;;;;;;;;IAKaA,OAAA,GAAU,SAAVA,OAAAA,CAAWC,OAGlB,EAAA;AACE,EAAA,IAAAC,QAAA,GAAoCC,GAAI,CAAA,EAAE,CAAA,CAAA;AAC1C,EAAA,IAAAC,MAAA,GAA0BD,IAAI,MAAM,CAAA,CAAA;AACpC,EAAA,IAAAE,aAAA,GAAgBF,IAAuB,IAAI,CAAA,CAAA;AAC3C,EAAA,IAAAG,eAAA,GAAkBH,IAAyB,IAAI,CAAA,CAAA;AAC/C,EAAA,IAAAI,mBAAA,GAAsBJ,GAAwB,CAAA,EAAE,CAAA,CAAA;AAEhD,EAAA,IAAAK,SAAA,GAAY,SAAZA,SAAAA,CAAaC,KAA8B,EAAA;AAAA,IAAA,IAAAC,MAAA,CAAA;IAC/CR,QAAA,CAASS,KAAQ,GAAAF,KAAA,CAAA;IACjBL,MAAA,CAAOO,KAAQ,GAAA,CAAA,CAAAD,MAAA,GAAAD,KAAA,CAAMA,KAAM,CAAAG,MAAA,GAAS,6CAArBF,MAAA,CAAyBN,MAAU,KAAA,MAAA,CAAA;GACpD,CAAA;AAEA,EAAA,IAAMS,kBAAkB,SAAlBA,kBAAwB;AAC5B,IAAA,IAAI,CAACR,aAAc,CAAAM,KAAA,EAAO,OAAA;AAE1BL,IAAAA,eAAA,CAAgBK,QAAQN,aAAc,CAAAM,KAAA,CAAMG,YAAa,CAAAC,SAAA,CAAU,UAACN,KAAU,EAAA;AAC5ED,MAAAA,SAAA,CAAUC,MAAMP,QAAQ,CAAA,CAAA;AAC1B,KAAC,CAAA,CAAA;GACH,CAAA;AAEA,EAAA,IAAMc,WAAW,SAAXA,WAAiB;AACPX,IAAAA,aAAA,CAAAM,KAAA,GAAQ,IAAIM,mBAAW,EAAA,CAAA;AACrCZ,IAAAA,aAAA,CAAcM,KAAM,CAAAO,IAAA,CAAKjB,OAAQ,CAAAkB,iBAAA,EAAmBlB,QAAQmB,eAAe,CAAA,CAAA;AACjEZ,IAAAA,SAAA,CAAAP,OAAA,CAAQmB,eAAmB,IAAA,EAAE,CAAA,CAAA;AACvBP,IAAAA,eAAA,EAAA,CAAA;GAClB,CAAA;AAEAQ,EAAAA,SAAA,CAAU,YAAM;AACLL,IAAAA,QAAA,EAAA,CAAA;AACX,GAAC,CAAA,CAAA;AAEDM,EAAAA,WAAA,CAAY,YAAM;IAChB,IAAIhB,gBAAgBK,KAAO,EAAA;MACzBL,eAAA,CAAgBK,KAAM,EAAA,CAAA;AACxB,KAAA;AACF,GAAC,CAAA,CAAA;AAGDY,EAAAA,KAAA,CACE,YAAA;IAAA,OAAMtB,OAAQ,CAAAmB,eAAA,CAAA;GACd,EAAA,UAACI,WAAgB,EAAA;AAET,IAAA,IAAAC,UAAA,GAAaC,KAAKC,SAAU,CAAApB,mBAAA,CAAoBI,KAAK,CAAM,KAAAe,IAAA,CAAKC,UAAUH,WAAW,CAAA,CAAA;IAE3F,IAAIC,UAAc,IAAAD,WAAA,IAAeA,WAAY,CAAAZ,MAAA,GAAS,CAAG,EAAA;MAEvDL,mBAAA,CAAoBI,KAAQ,GAAAa,WAAA,CAAA;MAG5B,IAAInB,cAAcM,KAAO,EAAA;QACTN,aAAA,CAAAM,KAAA,CAAMiB,WAAY,CAAAJ,WAAA,EAAa,SAAS,CAAA,CAAA;QAGtDhB,SAAA,CAAUgB,WAAW,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;AACF,GAAA,EACA;AAAEK,IAAAA,MAAM,IAAA;AAAK,GACf,CAAA,CAAA;EAEO,OAAA;AACLC,IAAAA,UAAY,EAAAzB,aAAA;AACZH,IAAAA,QAAA,EAAAA,QAAA;AACAE,IAAAA,MAAA,EAAAA,MAAAA;GACF,CAAA;AACF;;;;"}