1import{g as r,s as N,O as j,p as h,K as F,d as H,f as o,a as t,i as f,t as i,h as v,F as w,k,o as n,n as M}from"./app.92a0a85e.js";import{_ as O}from"./_plugin-vue_export-helper.cdc0426e.js";const V={class:"container-fluid py-3"},E={class:"d-flex justify-content-between align-items-center mb-3"},W={class:"mb-0"},z={key:0,class:"loader-overlay"},K={key:1,class:"text-center text-secondary small my-2"},P={class:"text-center text-secondary small mb-2"},q={key:0,class:"small text-muted border-start ps-2 mb-1"},A={class:"text-end small mt-1"},G={class:"me-1"},J=["innerHTML","onClick"],Q={key:2,class:"text-center text-muted mt-5"},U={class:"modal fade",id:"failReasonModal",tabindex:"-1"},X={class:"modal-dialog"},Y={class:"modal-content"},Z={class:"modal-body"},ee={__name:"Chat",props:{phone_number:String},setup(_){const p=_,l=r([]),c=r(!1),d=r(!1),y=r("");let g=null;const u=r(null);let m=null;N(()=>{g=new j(document.getElementById("failReasonModal")),b()});const b=async()=>{c.value=!0;try{const{data:e}=await h.get(`/api/chat/${p.phone_number}`);l.value=e.messages,l.value.length&&(m=l.value[0].created_at),await F(),L()}finally{c.value=!1}},C=async()=>{if(!(!m||d.value)){d.value=!0;try{const{data:e}=await h.get(`/api/chat/${p.phone_number}?before=${m}`);e.messages.length&&(l.value=[...e.messages,...l.value],m=e.messages[0].created_at)}finally{d.value=!1}}},T=async e=>{e.target.scrollTop<50&&!d.value&&await C()},L=()=>{u.value&&(u.value.scrollTop=u.value.scrollHeight)},R=H(()=>l.value.reduce((e,s)=>((e[s.date]=e[s.date]||[]).push(s),e),{})),D=e=>new Date(e).toLocaleDateString([],{weekday:"short",day:"numeric",month:"short"}),S=e=>e?new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"",B=e=>e.status==="pending"?'<i class="mdi mdi-clock-time-four-outline"></i>':e.status==="sent"?'<i class="mdi mdi-check"></i>':e.status==="delivered"?'<i class="mdi mdi-check-all"></i>':e.status==="read"?'<i class="mdi mdi-check-all text-primary"></i>':e.status==="failed"?'<i class="mdi mdi-alert-circle-outline text-danger"></i>':"",$=async e=>{const s=await h.get(`/api/message-log/${e}`);y.value=s.data.reason,g.show()};return(e,s)=>(n(),o("div",V,[t("div",E,[t("h5",W,[s[0]||(s[0]=t("i",{class:"mdi mdi-whatsapp text-success"},null,-1)),f(" Chat with "+i(_.phone_number),1)]),t("div",null,[t("button",{class:"btn btn-outline-primary btn-sm",onClick:b},s[1]||(s[1]=[t("i",{class:"mdi mdi-refresh"},null,-1),f(" Refresh ")]))])]),t("div",{class:"chat-window border rounded bg-light p-3 position-relative",style:{height:"70vh","overflow-y":"auto"},ref_key:"chatWindow",ref:u,onScrollPassive:T},[c.value?(n(),o("div",z,s[2]||(s[2]=[t("div",{class:"spinner-border text-success",role:"status"},[t("span",{class:"visually-hidden"},"Loading...")],-1)]))):v("",!0),d.value?(n(),o("div",K,s[3]||(s[3]=[t("div",{class:"spinner-border spinner-border-sm text-success me-2"},null,-1),f(" Loading older messages... ")]))):v("",!0),(n(!0),o(w,null,k(R.value,(I,x)=>(n(),o("div",{key:x,class:"mb-4"},[t("div",P,i(D(x)),1),(n(!0),o(w,null,k(I,a=>(n(),o("div",{key:a.id,class:"mb-2"},[t("div",{class:M(["d-flex",a.direction==="outgoing"?"justify-content-end":"justify-content-start"])},[t("div",{class:M(["p-2 rounded-3 shadow-sm",a.direction==="outgoing"?"bg-success text-white":"bg-white border"]),style:{"max-width":"70%"}},[a.reply_to_message?(n(),o("div",q,' Reply to: "'+i(a.reply_to_message)+'" ',1)):v("",!0),t("div",null,i(a.message),1),t("div",A,[t("span",G,i(S(a.sent_at)),1),t("span",{innerHTML:B(a),onClick:te=>a.status==="failed"&&$(a.id),style:{cursor:"pointer"}},null,8,J)])],2)],2)]))),128))]))),128)),!l.value.length&&!c.value?(n(),o("div",Q," No messages found for this conversation. ")):v("",!0)],544),t("div",U,[t("div",X,[t("div",Y,[s[4]||(s[4]=t("div",{class:"modal-header"},[t("h5",{class:"modal-title"},"Message Failure Reason"),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal"})],-1)),t("div",Z,[t("p",null,i(y.value),1)])])])])]))}},oe=O(ee,[["__scopeId","data-v-7f8303f8"]]);export{oe as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.