1import{_ as P}from"./D9MvgeHQ.js";import{_ as F}from"./BFMj98Ab.js";import{r as I}from"./BYrMGjzP.js";import{u as j,a as Z}from"./C-LiYy0w.js";import{K as J,z as W,r as m,av as G,e as L,w as O,g as Q,c as l,i as s,F as w,d as t,a as b,v as f,t as p,m as x,h as k,o,a3 as v,E as H,af as X}from"./hpNDvw06.js";import"./Cf455Atp.js";const Y={class:"container-fluid support-canned-page"},ee={key:0,class:"alert alert-secondary mb-0"},te={key:1,class:"alert alert-danger mb-0"},se={class:"support-canned-page__header"},ae={class:"support-canned-page__actions"},le={class:"row g-3"},oe={class:"col-lg-4"},ne={class:"support-canned-panel"},ie={key:0,class:"text-muted"},pe={key:1,class:"alert alert-danger mb-0"},re={key:2,class:"support-canned-list"},de=["onClick"],ue={class:"col-lg-8"},ce={key:0,class:"support-canned-panel"},me={class:"h5 mb-1"},_e={class:"text-muted support-template-description"},be={class:"mt-3"},ve={class:"support-template-placeholders"},ye={class:"support-template-placeholders__chips"},he={key:0},fe={class:"support-template-preview"},ge=["innerHTML"],we={key:0,class:"alert alert-danger mt-3 mb-0"},ke={key:1,class:"alert alert-success mt-3 mb-0"},Te={class:"support-canned-page__editor-actions"},Ce=["disabled"],Ee=["disabled"],Ke=J({__name:"email-templates",setup(xe){const T=j(),M=W(),C=I(M.public.apiUrl),{authStatus:y,fetchAuthStatus:N}=Z(),U={customerName:"Jane Doe",ticketNumber:"1234",ticketSubject:"Sensor offline since Monday",publicUrl:"https://www.airgradient.com/support/ticket/sample-link",knowledgeBaseUrl:"https://www.airgradient.com/support/"},h=m([]),E=m(!1),r=m(!1),g=m(""),u=m(""),c=m(""),S=m(!1),i=G({templateKey:"",bodyHtml:""}),_=L(()=>h.value.find(a=>a.templateKey===i.templateKey)||null),V=a=>{i.templateKey=a.templateKey,i.bodyHtml=a.bodyHtml,u.value="",c.value=""},z=a=>new RegExp(`\\{\\{\\s*${a}\\s*\\}\\}`).test(i.bodyHtml),$=a=>a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),B=L(()=>i.bodyHtml.replace(/\{\{\s*([a-zA-Z][a-zA-Z0-9_]*)\s*\}\}/g,(a,e)=>{const d=U[e];return d===void 0?a:$(d)}
1)),K=async()=>{E.value=!0,g.value="";try{h.value=await T(`${C}/support/admin/email-templates`,{credentials:"include"});const a=h.value.find(e=>e.templateKey===i.templateKey)||h.value[0];a&&V(a)}catch{g.value="Unable to load email templates."}finally{E.value=!1}},D=async()=>{var a;if(!(r.value||!i.templateKey)){r.value=!0,u.value="",c.value="";try{await T(`${C}/support/admin/email-templates/${i.templateKey}`,{method:"PUT",credentials:"include",body:{bodyHtml:i.bodyHtml.trim()}}),await K(),c.value="Template saved. New emails will use this copy."}catch(e){u.value=((a=e==null?void 0:e.data)==null?void 0:a.message)||"Unable to save template."}finally{r.value=!1}}},R=async()=>{if(!(r.value||!i.templateKey)){r.value=!0,u.value="",c.value="";try{await T(`${C}/support/admin/email-templates/${i.templateKey}`,{method:"DELETE",credentials:"include"}),await K(),c.value="Template reset to the default copy."}catch{u.value="Unable to reset template."}finally{r.value=!1}}},A=async()=>{S.value||y.value!=="authorized"||(S.value=!0,await K())};return O(y,()=>{A()},{immediate:!0}),Q(async()=>{await N(),await A()}),(a,e)=>{const d=P,q=F;return o(),l("main",Y,[s(y)==="idle"||s(y)==="loading"?(o(),l("div",ee," Checking access... ")):s(y)!=="authorized"?(o(),l("div",te," Support staff access required. ")):(o(),l(w,{key:2},[t("div",se,[e[6]||(e[6]=t("div",null,[t("div",{class:"support-canned-page__eyebrow"},"Customer Support"),t("h1",{class:"support-canned-page__title mb-0"},"Email Templates")],-1)),t("div",ae,[b(d,{class:"btn-small button-blue",to:"/admin/support"},{default:f(()=>[...e[1]||(e[1]=[v("Tickets",-1)])]),_:1}),b(d,{class:"btn-small button-blue",to:"/admin/support/agents"},{default:f(()=>[...e[2]||(e[2]=[v("Agents",-1)])]),_:1}),b(d,{class:"btn-small button-blue",to:"/admin/support/canned-responses"},{default:f(()=>[...e[3]||(e[3]=[v(" Canned responses ",-1)])]),_:1}),b(d,{class:"btn-small button-blue",to:"/admin/support/tags"},{default:f(()=>[...e[4]||(e[4]=[v("Tags",-1)])]),_:1}),b(d,{class:"btn-small button-blue",to:"/admin/support/system-log"},{default:f(()=>[...e[5]||(e[5]=[v(" System Log ",-1)])]),_:1})])]),t("div",le,[t("aside",oe,[t("section",ne,[s(E)?(o(),l("div",ie,"Loading templates...")):s(g)?(o(),l("div",pe,p(s(g)),1)):(o(),l("div",re,[(o(!0),l(w,null,x(s(h),n=>(o(),l("button",{key:n.templateKey,class:H(["support-canned-list__item",{"support-canned-list__item--active":s(i).templateKey===n.templateKey}]),type:"button",onClick:He=>V(n)},[t("span",null,p(n.label),1),t("span",{class:H(["badge",n.isCustomized?"text-bg-success":"text-bg-secondary"])},p(n.isCustomized?"Edited":"Default"),3)],10,de))),128))]))])]),t("section",ue,[s(_)?(o(),l("section",ce,[t("h2",me,p(s(_).label),1),t("p",_e,p(s(_).description),1),e[11]||(e[11]=t("div",{class:"support-template-note"}," The subject line, and the reply marker that lets customer replies attach to the ticket, are added automatically and cannot be edited here. ",-1)),t("div",be,[e[7]||(e[7]=t("label",{class:"form-label"},"Email body",-1)),b(q,{modelValue:s(i).bodyHtml,"onUpdate:modelValue":e[0]||(e[0]=n=>s(i).bodyHtml=n),label:"Email template body","allow-files":!1,"allow-placeholder-links":""},null,8,["modelValue"])]),t("div",ve,[e[8]||(e[8]=t("div",{class:"support-template-placeholders__title"},"Placeholders",-1)),e[9]||(e[9]=t("p",{class:"support-template-placeholders__hint"}," These are replaced with the real ticket details when the email is sent. Required ones must stay in the body. ",-1)),t("div",ye,[(o(!0),l(w,null,x(s(_).requiredVariables,n=>(o(),l("code",{key:n,class:H(["support-template-chip support-template-chip--required",{"support-template-chip--missing":!z(n)}])},[v(" {{"+p(n)+"}} ",1),z(n)?k("",!0):(o(),l("span",he," â missing"))],2))),128)),(o(!0),l(w,null,x(s(_).optionalVariables,n=>(o(),l("code",{key:n,class:"support-template-chip"}," {{"+p(n)+"}} ",1))),128))])]),t("div",fe,[e[10]||(e[10]=t("div",{class:"support-template-preview__title"},"Preview (with sample data)",-1)),t("div",{class:"support-template-preview__body",innerHTML:s(B)},null,8,ge)]),s(u)?(o(),l("div",we,p(s(u)),1)):k("",!0),s(c)?(o(),l("div",ke,p(s(c)),1)):k("",!0),t("div",Te,[t("button",{class:"btn-small support-danger-button",type:"button",disabled:!s(_).isCu
1stomized||s(r),onClick:R}," Reset to default ",8,Ce),t("button",{class:"btn-small button-orange",type:"button",disabled:s(r)||!s(i).bodyHtml.trim(),onClick:D}," Save template ",8,Ee)])])):k("",!0)])])],64))])}}}),Ne=X(Ke,[["__scopeId","data-v-6895c520"]]);export{Ne 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.