@artmate/chat
Version:
借鉴字节开源react库AntX,通过vue实现的版本
2 lines (1 loc) • 1.7 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("vue"),w=require("./useSyncState.js"),P=require("../hooks/useEventCallback.js");function R(o){return Array.isArray(o)?o:[o]}function S(o){const{defaultMessages:y,agent:h,requestFallback:d,requestPlaceholder:c,parser:m}=o,q=M.ref(0),A=M.computed(()=>(y||[]).map((r,e)=>({id:`default_${e}`,status:"local",...r}))),[g,l]=w.default(A.value,()=>{}),f=(r,e)=>{const u={id:`msg_${q.value}`,message:r,status:e};return q.value+=1,u},E=M.computed(()=>{const r=[];return g.value.forEach(e=>{const u=m?m(e.message):e.message,i=R(u);i.forEach((a,t)=>{let s=e.id;i.length>1&&(s=`${s}_${t}`),r.push({id:s,message:a,status:e.status})})}),r}),v=r=>r.filter(e=>e.status!=="loading"&&e.status!=="error").map(e=>e.message),b=()=>v(g.value);return{onRequest:P.useEventCallback(r=>{if(!h)throw new Error("The agent parameter is required when using the onRequest method in an agent generated by useArtAgent.");let e=null;l(a=>{let t=[...a,f(r,"local")];if(c){let s;typeof c=="function"?s=c(r,{messages:v(t)}):s=c;const n=f(s,"loading");e=n.id,t=[...t,n]}return t});let u=null;const i=(a,t)=>{let s=g.value.find(n=>n.id===u);return s?l(n=>n.map(p=>p.id===u?{...p,message:a,status:t}:p)):(s=f(a,t),l(n=>[...n.filter(k=>k.id!==e),s]),u=s.id),s};h.request({message:r,messages:b()},{onUpdate:a=>{i(a,"loading")},onSuccess:a=>{i(a,"success")},onError:async a=>{if(d){let t;typeof d=="function"?t=await d(r,{error:a,messages:b()}):t=d,l(s=>[...s.filter(n=>n.id!==e&&n.id!==u),f(t,"error")])}else l(t=>t.filter(s=>s.id!==e&&s.id!==u))}})}),messages:g,parsedMessages:E,setMessages:l}}exports.default=S;