1import{d as le,q as u,x as re,j as oe,U as p,O as l,_ as s,u as a,L as o,bc as ie,a0 as i,bd as ne,P as de,M as f,F as V,V as U,a8 as D,$ as n,K as z,be as ue,bf as ce,bg as me,aC as fe,a2 as ve}from"./icons-Bgx76RDF.js";import{_ as pe,a as _e,b as ge,c as be,d as xe,e as ye,f as we}from"./AppLayout.vue_vue_type_script_setup_true_lang-BvhncCaL.js";import{h as he,c as v,g as ke,e as Ae}from"./app-1To86AzH.js";import{a as R,_ as $e}from"./CardContent.vue_vue_type_script_setup_true_lang-CtmNO7J9.js";import{_ as Ce}from"./CardDescription.vue_vue_type_script_setup_true_lang-CsVFPsrL.js";import{_ as Ve}from"./CardHeader.vue_vue_type_script_setup_true_lang-Dpqv7VRL.js";import{_ as Ee}from"./CardTitle.vue_vue_type_script_setup_true_lang-DGevopHP.js";import{_}from"./index-B_Re349R.js";import{_ as Se}from"./Input.vue_vue_type_script_setup_true_lang-DhF2TxEr.js";import{_ as A}from"./Label.vue_vue_type_script_setup_true_lang-CQc2ZaV7.js";import{_ as Ue}from"./index-DRJF5lkF.js";import{d as O,_ as M,a as P,b as B,c as N}from"./index-CTNqJoAD.js";import{_ as Te}from"./Switch.vue_vue_type_script_setup_true_lang-CHq05uWm.js";import{_ as De}from"./index-Czve7zag.js";import{t as c}from"./index-ypZ4j5CC.js";import"./utils-CDN07tui.js";import"./reka-ui-CxQDcGDz.js";import"./SheetTrigger.vue_vue_type_script_setup_true_lang-ClJRYQsn.js";import"./index-DgDhoHPE.js";import"./TooltipTrigger.vue_vue_type_script_setup_true_lang-XzAgB0RT.js";import"./useInitials-C0AQeawK.js";import"./useStaffSidebar-DBxGPlKt.js";import"./index-DQD3-gx9.js";import"./index-DzzYwkmi.js";const Oe={class:"flex h-full w-full mx-auto flex-1 flex-col gap-2 sm:gap-4 rounded-xl p-2 sm:p-4 max-w-7xl"},Me={class:"flex items-center justify-between"},Pe={class:"flex items-center gap-3"},Be={class:"p-2 rounded-lg bg-orange-500 text-white"},Ne={class:"overflow-x-auto"},Le={class:"w-full"},Fe={key:0},je={class:"p-4"},ze={class:"p-4"},Re={class:"text-sm font-medium"},qe={class:"p-4"},Ie={class:"text-sm text-muted-foreground line-clamp-2 max-w-md"},Ge={class:"p-4"},He={class:"p-4"},Ke={class:"text-sm text-muted-foreground"},We={class:"p-4"},Ye={class:"text-sm"},Je={class:"p-4"},Qe={class:"p-4"},Xe={class:"text-sm text-muted-foreground"},Ze={class:"p-4"},et={class:"flex items-center justify-end gap-2"},tt={class:"space-y-2"},at={class:"space-y-2"},st={class:"text-sm text-muted-foreground"},lt={class:"space-y-2"},rt={class:"grid grid-cols-2 gap-4"},ot={class:"space-y-2"},it={class:"space-y-2"},nt={class:"flex items-center justify-between rounded-lg border p-3"},dt={class:"space-y-0.5"},Pt=le({layout:pe,__name:"Alerts",setup(ut){const T=u([]),$=u(!1),g=u(!1),C=u(!1),E=u(null),b=u(""),m=u(""),x=u("success"),y=u("all"),w=u(30),h=u(!1),L=[{value:"default",label:"Default"},{value:"neutral",label:"Grey"},{value:"success",label:"Green"},{value:"amber",label:"Amber"},{value:"destructive",label:"Red"}],q=[{value:"all",label:"All Users"},{value:"crm_explorers",label:"CRM Explorers only"},{value:"subscription_without_payment",label:"Subscribers without valid payment"},{value:"email_not_verified",label:"Email Not Verified"},{value:"past_due",label:"Past Due Subscribers"}],I=[{value:5,label:"5 seconds"},{value:10,label:"10 seconds"},{value:30,label:"30 seconds"},{value:60,label:"1 minute"},{value:120,label:"2 minutes"},{value:300,label:"5 minutes"},{value:0,label:"Manual close"}],k=async()=>{try{const r=await v.get("/admin/broadcast-alerts");T.value=r.data}catch(r){console.error("Error loading alerts:",r),c.error("Failed to load alerts")}},G=()=>{g.value=!1,E.value=null,b.value="",m.value="",x.value="success",y.value="all",w.value=30,h.value=!1,$.value=!0},F=u(!1),H=r=>{g.value=!0,E.value=r.id,F.value=r.is_active,b.value=r.title||"",m.value=r.message,x.value=r.variant,y.value=r.target_group||"all",w.value=r.timeout/1e3,h.value=r.show_once||!1,$.value=!0},j=()=>{$.value=!1},K=async()=>{var r,e;if(!m.value){c.error("Please fill in the message");return}C.value=!0;try{if(g.value&&E.value){const t=E.value,d=F.value;await v.put(`/admin/broadcast-alerts/${t}`,{title:b.value||null,message:m.value,variant:x.value,target_group:y.value,timeout:w.value*1e3,show_once:h.value}),d?(await v.post(`/admin/broadcast-alerts/${t}/deactivate`),await new Promise(se=>setTimeout(se,1e3)),await v.post(`/admin/broadcast-alerts/${t}/activate`),c.success("Alert updated and re-broadcast to users!")):c.success("Alert updated successfully!")}else await v.post("/admin/broadcast-alerts",{title:b.value||null,message:m.value,variant:x.value,target_group:y.value,timeout:w.value*1e3,show_once:h.value}),c.success("Alert created successfully!");j(),await k()}catch(t){console.error("Error saving alert:",t),c.error(((e=(r=t.response)==null?void 0:r.data)==null?void 0:e.message)||"Failed to save alert")}finally{C.value=!1}},W=async r=>{var e,t;if(confirm("Are you sure you want to delete this alert?"))try{await v.delete(`/admin/broadcast-alerts/${r}`),c.success("Alert deleted successfully!"),await k()}catch(d){console.error("Error deleting alert:",d),c.error(((t=(e=d.response)==null?void 0:e.data)==null?void 0:t.message)||"Failed to delete alert")}},Y=async r=>{var e,t;try{await v.post(`/admin/broadcast-alerts/${r}/activate`),c.success("Alert activated and broadcast to users!"),await k()}catch(d){console.error("Error activating alert:",d),c.error(((t=(e=d.response)==null?void 0:e.data)==null?void 0:t.message)||"Failed to activate alert")}},J=async r=>{var e,t;try{await v.post(`/admin/broadcast-alerts/${r}/deactivate`),c.success("Alert deactivated!"),await k()}catch(d){console.error("Error deactivating alert:",d),c.error(((t=(e=d.response)==null?void 0:e.data)==null?void 0:t.message)||"Failed to deactivate alert")}},Q=r=>{var e;return((e=L.find(t=>t.value===r))==null?void 0:e.label)||r},X=r=>{switch(r){case"success":return"text-green-600 bg-green-50 dark:bg-green-950 dark:text-green-400";case"amber":return"text-amber-600 bg-amber-50 dark:bg-amber-950 dar
1k:text-amber-400";case"destructive":return"text-red-600 bg-red-50 dark:bg-red-950 dark:text-red-400";case"neutral":return"text-gray-600 bg-gray-50 dark:bg-gray-950 dark:text-gray-400";default:return"text-blue-600 bg-blue-50 dark:bg-blue-950 dark:text-blue-400"}},Z=r=>{if(r===0)return"Manual";const e=r/1e3;return e<60?`${e}s`:`${e/60}m`},ee=r=>r==="crm_explorers"?"CRM Explorers":r==="subscription_without_payment"?"No Payment":r==="email_not_verified"?"Unverified Email":r==="past_due"?"Past Due":"All";let S=null;const te=()=>{S=ke(),S.channel("alerts").listen(".AlertBroadcast",async r=>{console.log("Admin: Received alert broadcast:",r),await k()})},ae=()=>{S&&(S.leave("alerts"),Ae())};return re(()=>{k(),te()}),oe(()=>{ae()}),(r,e)=>(f(),p(V,null,[l(a(he),{title:"Broadcast Alerts"}),s("div",Oe,[l(a(R),null,{default:o(()=>[l(a(Ve),null,{default:o(()=>[s("div",Me,[s("div",Pe,[s("div",Be,[l(a(ie),{class:"h-5 w-5"})]),s("div",null,[l(a(Ee),{class:"text-2xl"},{default:o(()=>[...e[7]||(e[7]=[i("Broadcast Alerts",-1)])]),_:1}),l(a(Ce),null,{default:o(()=>[...e[8]||(e[8]=[i("Manage and broadcast alerts to all users",-1)])]),_:1})])]),l(a(_),{onClick:G,class:"gap-2"},{default:o(()=>[l(a(ne),{class:"h-4 w-4"}),e[9]||(e[9]=i(" Create Alert ",-1))]),_:1})])]),_:1})]),_:1}),l(a(R),null,{default:o(()=>[l(a($e),{class:"p-0"},{default:o(()=>[s("div",Ne,[s("table",Le,[e[15]||(e[15]=s("thead",{class:"border-b bg-muted/50"},[s("tr",null,[s("th",{class:"text-left p-4 font-semibold text-sm"},"Status"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Title"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Message"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Type"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Target"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Timeout"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Show Once"),s("th",{class:"text-left p-4 font-semibold text-sm"},"Created"),s("th",{class:"text-right p-4 font-semibold text-sm"},"Actions")])],-1)),s("tbody",null,[T.value.length===0?(f(),p("tr",Fe,[...e[10]||(e[10]=[s("td",{colspan:"9",class:"text-center p-8 text-muted-foreground"},' No alerts created yet. Click "Create Alert" to get started. ',-1)])])):de("",!0),(f(!0),p(V,null,U(T.value,t=>(f(),p("tr",{key:t.id,class:"border-b last:border-0 hover:bg-muted/30 transition-colors"},[s("td",je,[s("span",{class:D(["inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium",t.is_active?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300"])},n(t.is_active?"Active":"Inactive"),3)]),s("td",ze,[s("span",Re,n(t.title||"-"),1)]),s("td",qe,[s("span",Ie,n(t.message),1)]),s("td",Ge,[s("span",{class:D(["inline-flex items-center px-2 py-1 rounded text-xs font-medium",X(t.variant)])},n(Q(t.variant)),3)]),s("td",He,[s("span",Ke,n(ee(t.target_group)),1)]),s("td",We,[s("span",Ye,n(Z(t.timeout)),1)]),s("td",Je,[s("span",{class:D(["inline-flex items-center px-2 py-0.5 rounded text-xs font-medium",t.show_once?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"text-muted-foreground"])},n(t.show_once?"Yes":"No"),3)]),s("td",Qe,[s("span",Xe,n(new Date(t.created_at).toLocaleDateString()),1)]),s("td",Ze,[s("div",et,[t.is_active?(f(),z(a(_),{key:1,onClick:d=>J(t.id),variant:"outline",size:"sm",class:"gap-1.5"},{default:o(()=>[l(a(ce),{class:"h-3.5 w-3.5"}),e[12]||(e[12]=i(" Deactivate ",-1))]),_:1},8,["onClick"])):(f(),z(a(_),{key:0,onClick:d=>Y(t.id),variant:"outline",size:"sm",class:"gap-1.5"},{default:o(()=>[l(a(ue),{class:"h-3.5 w-3.5"}),e[11]||(e[11]=i(" Activate ",-1))]),_:1},8,["onClick"])),l(a(_),{onClick:d=>H(t),variant:"ghost",size:"sm",class:"gap-1.5"},{default:o(()=>[l(a(me),{class:"h-3.5 w-3.5"}),e[13]||(e[13]=i(" Edit ",-1))]),_:1},8,["onClick"]),l(a(_),{onClick:d=>W(t.id),variant:"ghost",size:"sm",class:"gap-1.5 text-destructive hover:text-destructive",disabled:t.is_active},{default:o(()=>[l(a(fe),{class:"h-3.5 w-3.5"}),e[14]||(e[14]=i(" Delete ",-1))]),_:1},8,["onClick","disabled"])])])]))),128))])])])]),_:1})]),_:1})]),l(a(we),{open:$.value,"onUpdate:open":e[6]||(e[6]=t=>$.value=t)},{default:o(()=>[l(a(_e),{class:"sm:max-w-[525px]"},{default:o(()=>[l(a(ge),null,{default:o(()=>[l(a(be),null,{default:o(()=>[i(n(g.value?"Edit Alert":"Create New Alert"),1)]),_:1}),l(a(xe),null,{default:o(()=>[i(n(g.value?"Update the alert details below.":"Create a new alert to broadcast to users."),1)]),_:1})]),_:1}),s("form",{onSubmit:ve(K,["prevent"]),class:"space-y-4"},[s("div",tt,[l(a(A),{for:"dialog-title"},{default:o(()=>[...e[16]||(e[16]=[i("Alert Title (Optional)",-1)])]),_:1}),l(a(Se),{id:"dialog-title",modelValue:b.value,"onUpdate:modelValue":e[0]||(e[0]=t=>b.value=t),placeholder:"Enter alert title",maxlength:"255"},null,8,["modelValue"])]),s("div",at,[l(a(A),{for:"dialog-message"},{default:o(()=>[...e[17]||(e[17]=[i("Alert Message",-1)])]),_:1}),l(a(Ue),{id:"dialog-message",modelValue:m.value,"onUpdate:modelValue":e[1]||(e[1]=t=>m.value=t),placeholder:"Enter alert message",rows:4,maxlength:"1000",required:""},null,8,["modelValue"]),s("p",st,[i(n(m.value.length)+'/1000 characters. Supports HTML links: <a href="url">text</a>. Use the shortcode ',1),e[18]||(e[18]=s("code",{class:"rounded bg-muted px-1 py-0.5 text-xs"},"[referral_link]",-1)),e[19]||(e[19]=i(" to insert the viewer's own referral link as a click-to-copy link. ",-1))])]),s("div",lt,[l(a(A),{for:"dialog-target-group"},{default:o(()=>[...e[20]||(e[20]=[i("Target Audience",-1)])]),_:1}),l(a(O),{modelValue:y.value,"onUpdate:modelValue":e[2]||(e[2]=t=>y.value=t)},{default:o(()=>[l(a(M),{id:"dialog-target-group"},{default:o(()=>[l(a(P),{placeholder:"Select target audience"})]),_:1}),l(a(B),null,{default:o(()=>[(f(),p(V,null,U(q,t=>l(a(N),{key:t.value,value:t.value},{default:o(()=>[i(n(t.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),s("div",rt,[s("div",ot,[l(a(A),{for:"dialog-variant"},{default:o(()=>[...e[21]||(e[21]=[i("Alert Type",-1)])]),_:1}),l(a(O),{modelValue:x.value,"onUpdate:modelValue":e[3]||(e[3]=t=>x.value=t)},{default:o(()=>[l(a(M),{id:"dialog-variant"},{default:o(()=>[l(a(P),{placeholder:"Select alert type"})]),_:1}),l(a(B),null,{default:o(()=>[(f(),p(V,null,U(L,t=>l(a(N),{key:t.value,value:t.value},{default:o(()=>[i(n(t.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),s("div",it,[l(a(A),{for:"dialog-timeout"},{default:o(()=>[...e[22]||(e[22]=[i("Auto-close after",-1)])]),_:1}),l(a(O),{modelValue:w.value,"onUpdate:modelValue":e[4]||(e[4]=t=>w.value=t)},{default:o(()=>[l(a(M),{id:"dialog-timeout"},{default:o(()=>[l(a(P),{placeholder:"Select timeout"})]),_:1}),l(a(B),null,{default:o(()=>[(f(),p(V,null,U(I,t=>l(a(N),{key:t.value,value:t.value},{default:o(()=>[i(n(t.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])])]),s("div",nt,[s("div",dt,[l(a(A),{for:"dialog-show-once",class:"text-sm font-medium"},{default:o(()=>[...e[23]||(e[23]=[i("Show Once",-1)])]),_:1}),e[24]||(e[24]=s("p",{class:"text-xs text-muted-foreground"}," Only show this alert once per user (tracked in browser storage) ",-1))]),l(a(Te),{id:"dialog-show-once",modelValue:h.value,"onUpdate:modelValue":e[5]||(e[5]=t=>h.value=t)},null,8,["modelValue"])]),l(a(ye),{class:"gap-2"},{default:o(()=>[l(a(_),{type:"button",variant:"outline",onClick:j,disabled:C.value},{default:o(()=>[...e[25]||(e[25]=[i(" Cancel ",-1)])]),_:1},8,["disabled"]),l(a(_),{type:"submit",disabled:C.value||!m.value},{default:o(()=>[i(n(C.value?"Saving...":g.value?"Update Alert":"Create Alert"),1)]),_:1},8,["disabled"])]),_:1})],32)]),_:1})]),_:1},8,["open"]),l(a(De),{position:"bottom-right"})],64))}});
1export{Pt 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.