PageSourceSearch

https://document-processing.serverlessworkshops.io/assets/AnnouncementsView-Dkl4LFak.js

js serverlessworkshops.io collected 2026-09-24 20:46:38 UTC 26,859 bytes, 1 lines download raw bytes

1import{d as me,c as P,q as J,w as ie,z as j,B as e,E as te,G as u,u as a,H as B,k as _,F as ge,V as be,C as D,r as V,a as ye,D as re,K as k,Q as H,W as Q,A as ne,o as Ee,U as Ue}from"./vendor-vue-Dzwqm9Y9.js";import{_ as N,a as he,g as xe,h as ee,j as K,aa as Le,H as ve,G as le}from"./index-D4B9XJED.js";import{g as ke}from"./usePersistedPageSize-x0WpaIWh.js";import{_ as Ne}from"./AppLayout.vue_vue_type_script_setup_true_lang-964gbyG2.js";import{T as Pe}from"./TablePageLayout-BSHryiYN.js";import{D as we}from"./DataTable-CpLnuJXJ.js";import{P as $e}from"./Pagination-B13-Vhh-.js";import{_ as Me}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-DkHWYJXe.js";import{S as ae}from"./Select-BjYX9AhD.js";import{_ as Re}from"./EmptyState.vue_vue_type_script_setup_true_lang-BZop-dpC.js";import{_ as Fe}from"./GroupSelector.vue_vue_type_script_setup_true_lang-CEVkWuFe.js";import{u as fe}from"./vendor-i18n-BuoWFzps.js";import"./vendor-misc-B-nM3tYW.js";import"./AppHeader.vue_vue_type_style_index_0_scoped_59fb3e77_lang-C9_N2XZy.js";import"./useClipboard-Cj86XNkg.js";import"./LocaleSwitcher-BANwbqFd.js";/* empty css                                                                       */import"./GroupBadge.vue_vue_type_script_setup_true_lang-DYCXiEVb.js";import"./peak-rate-qZGUWdry.js";import"./PlatformIcon.vue_vue_type_script_setup_true_lang-C_SSDXYQ.js";const je={class:"rounded-2xl border border-gray-200 bg-gray-50 p-4 dark:border-dark-700 dark:bg-dark-800/50"},Be={class:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between"},Je={class:"text-sm font-medium text-gray-900 dark:text-white"},Ge={class:"mt-1 text-xs text-gray-500 dark:text-dark-400"},qe={class:"flex items-center gap-3"},He={class:"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300"},Qe=["checked"],Ke={class:"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300"},We=["checked"],Xe={key:0,class:"mt-4 space-y-4"},Ye={class:"flex items-center justify-between"},Ze={class:"text-sm font-medium text-gray-900 dark:text-white"},Ie={class:"ml-1 text-xs font-normal text-gray-500 dark:text-dark-400"},et=["disabled"],tt={key:0,class:"rounded-xl border border-dashed border-gray-300 p-4 text-sm text-gray-500 dark:border-dark-600 dark:text-dark-400"},nt={class:"flex items-start justify-between gap-3"},at={class:"min-w-0"},st={class:"text-sm font-medium text-gray-900 dark:text-white"},ot={class:"ml-2 text-xs font-normal text-gray-500 dark:text-dark-400"},lt={class:"mt-1 text-xs text-gray-500 dark:text-dark-400"},it=["onClick"],rt={class:"mt-4 space-y-3"},dt={class:"flex flex-col gap-3 md:flex-row md:items-end"},ut={class:"w-full md:w-52"},ct={class:"input-label"},mt={key:0,class:"flex-1"},ft={class:"input-label"},pt={key:1,class:"flex flex-1 flex-col gap-3 sm:flex-row"},_t={class:"w-full sm:w-44"},gt={class:"input-label"},bt={class:"w-full sm:flex-1"},vt={class:"input-label"},yt=["value","onInput"],ht={class:"flex justify-end"},xt=["onClick"],kt={class:"flex justify-end"},wt=["disabled","onClick"],$t={key:1,class:"rounded-xl border border-red-200 bg-red-50 p-3 text-sm text-red-700 dark:border-red-900/30 dark:bg-red-900/10 dark:text-red-300"},Ct=me({__name:"AnnouncementTargetingEditor",props:{modelValue:{},groups:{}},emits:["update:modelValue"],setup(G,{emit:n}){const{t:r}=fe(),M=G,C=n,E=P(()=>{var o;return((o=M.modelValue)==null?void 0:o.any_of)??[]}),A=P(()=>E.value.length===0?"all":"custom"),b=P(()=>[{value:"subscription",label:r("admin.announcements.form.conditionSubscription")},{value:"balance",label:r("admin.announcements.form.conditionBalance")}]),p=P(()=>[{value:"gt",label:r("admin.announcements.operators.gt")},{value:"gte",label:r("admin.announcements.operators.gte")},{value:"lt",label:r("admin.announcements.operators.lt")},{value:"lte",label:r("admin.announcements.operators.lte")},{value:"eq",label:r("admin.announcements.operators.eq")}]);function U(o){if(o==="all"){C("update:modelValue",{any_of:[]});return}E.value.length===0&&C("update:modelValue",{any_of:[{all_of:[R()]}]})}function R(){return{type:"subscription",operator:"in",group_ids:[]}}function W(){return{type:"balance",operator:"gte",value:0}}function v(o){const d=JSON.parse(JSON.stringify(M.modelValue??{any_of:[]}));d.any_of||(d.any_of=[]),o(d),C("update:modelValue",d)}function F(){v(o=>{o.any_of.length>=50||o.any_of.push({all_of:[R()]})})}function X(o){v(d=>{d.any_of.splice(o,1)})}function S(o){v(d=>{const c=d.any_of[o];c.all_of||(c.all_of=[]),!(c.all_of.length>=50)&&c.all_of.push(R())})}function h(o,d){v(c=>{const t=c.any_of[o];t!=null&&t.all_of&&t.all_of.splice(d,1)})}function Y(o,d,c){v(t=>{const m=t.any_of[o];m!=null&&m.all_of&&(c==="subscription"?m.all_of[d]=R():m.all_of[d]=W())})}
1function Z(o,d,c){v(t=>{const m=t.any_of[o];if(!(m!=null&&m.all_of))return;const $=m.all_of[d];$&&($.operator=c)})}function I(o,d,c){const t=c===""?0:Number(c);v(m=>{const $=m.any_of[o];if(!($!=null&&$.all_of))return;const g=$.all_of[d];g&&(g.value=Number.isFinite(t)?t:0)})}const T=J({});function L(o,d){T[o]||(T[o]={}),T[o][d]||(T[o][d]=[])}ie(()=>M.modelValue,o=>{var c,t;const d=(o==null?void 0:o.any_of)??[];for(let m=0;m<d.length;m++){const $=((c=d[m])==null?void 0:c.all_of)??[];for(let g=0;g<$.length;g++){const x=$[g];if((x==null?void 0:x.type)==="subscription"){L(m,g);const z=(x.group_ids??[]).slice(),de=((t=T[m])==null?void 0:t[g])??[];JSON.stringify(z.sort())!==JSON.stringify(de.sort())&&(T[m][g]=z)}}}},{immediate:!0});let y=null;ie(()=>T,()=>{y&&clearTimeout(y),y=setTimeout(()=>{var c,t;const o=JSON.parse(JSON.stringify(M.modelValue??{any_of:[]}));o.any_of||(o.any_of=[]);const d=o.any_of??[];for(let m=0;m<d.length;m++){const $=((c=d[m])==null?void 0:c.all_of)??[];for(let g=0;g<$.length;g++){const x=$[g];(x==null?void 0:x.type)==="subscription"&&(L(m,g),x.operator="in",x.group_ids=(((t=T[m])==null?void 0:t[g])??[]).slice())}}JSON.stringify(M.modelValue)!==JSON.stringify(o)&&C("update:modelValue",o)},0)},{deep:!0});const w=P(()=>{if(A.value!=="custom")return"";const o=E.value;if(o.length===0)return r("admin.announcements.form.addOrGroup");if(o.length>50)return"any_of > 50";for(const d of o){const c=(d==null?void 0:d.all_of)??[];if(c.length===0)return r("admin.announcements.form.addAndCondition");if(c.length>50)return"all_of > 50";for(const t of c)if(t.type==="subscription"&&(!t.group_ids||t.group_ids.length===0))return r("admin.announcements.form.selectPackages")}return""});return(o,d)=>(D(),j("div",je,[e("div",Be,[e("div",null,[e("div",Je,u(a(r)("admin.announcements.form.targetingMode")),1),e("div",Ge,u(A.value==="all"?a(r)("admin.announcements.form.targetingAll"):a(r)("admin.announcements.form.targetingCustom")),1)]),e("div",qe,[e("label",He,[e("input",{type:"radio",name:"announcement-targeting-mode",value:"all",checked:A.value==="all",onChange:d[0]||(d[0]=c=>U("all")),class:"h-4 w-4"},null,40,Qe),B(" "+u(a(r)("admin.announcements.form.targetingAll")),1)]),e("label",Ke,[e("input",{type:"radio",name:"announcement-targeting-mode",value:"custom",checked:A.value==="custom",onChange:d[1]||(d[1]=c=>U("custom")),class:"h-4 w-4"},null,40,We),B(" "+u(a(r)("admin.announcements.form.targetingCustom")),1)])])]),A.value==="custom"?(D(),j("div",Xe,[e("div",Ye,[e("div",Ze,[d[2]||(d[2]=B(" OR ",-1)),e("span",Ie," ("+u(E.value.length)+"/50) ",1)]),e("button",{type:"button",class:"btn btn-secondary",disabled:E.value.length>=50,onClick:F},[_(N,{name:"plus",size:"sm",class:"mr-1"}),B(" "+u(a(r)("admin.announcements.form.addOrGroup")),1)],8,et)]),E.value.length===0?(D(),j("div",tt,u(a(r)("admin.announcements.form.targetingCustom"))+": "+u(a(r)("admin.announcements.form.addOrGroup")),1)):te("",!0),(D(!0),j(ge,null,be(E.value,(c,t)=>{var m,$;return D(),j("div",{key:t,class:"rounded-2xl border border-gray-200 bg-white p-4 shadow-sm dark:border-dark-700 dark:bg-dark-800"},[e("div",nt,[e("div",at,[e("div",st,[B(u(a(r)("admin.announcements.form.targetingCustom"))+" #"+u(t+1)+" ",1),e("span",ot,"AND ("+u(((m=c.all_of)==null?void 0:m.length)||0)+"/50)",1)]),e("div",lt,u(a(r)("admin.announcements.form.addAndCondition")),1)]),e("button",{type:"button",class:"btn btn-secondary",onClick:g=>X(t)},[_(N,{name:"trash",size:"sm",class:"mr-1"}),B(" "+u(a(r)("common.delete")),1)],8,it)]),e("div",rt,[(D(!0),j(ge,null,be(c.all_of||[],(g,x)=>(D(),j("div",{key:x,class:"rounded-xl border border-gray-200 bg-gray-50 p-3 dark:border-dark-700 dark:bg-dark-900/30"},[e("div",dt,[e("div",ut,[e("label",ct,u(a(r)("admin.announcements.form.conditionType")),1),_(ae,{"model-value":g.type,options:b.value,"onUpdate:modelValue":z=>Y(t,x,z)},null,8,["model-value","options","onUpdate:modelValue"])]),g.type==="subscription"?(D(),j("div",mt,[e("label",ft,u(a(r)("admin.announcements.form.selectPackages")),1),_(Fe,{modelValue:T[t][x],"onUpdate:modelValue":z=>T[t][x]=z,groups:G.groups},null,8,["modelValue","onUpdate:modelValue","groups"])])):(D(),j("div",pt,[e("div",_t,[e("label",gt,u(a(r)("admin.announcements.form.operator")),1),_(ae,{"model-value":g.operator,options:p.value,"onUpdate:modelValue":z=>Z(t,x,z)}
1,null,8,["model-value","options","onUpdate:modelValue"])]),e("div",bt,[e("label",vt,u(a(r)("admin.announcements.form.balanceValue")),1),e("input",{value:String(g.value??""),type:"number",step:"any",class:"input",onInput:z=>I(t,x,z.target.value)},null,40,yt)])])),e("div",ht,[e("button",{type:"button",class:"btn btn-secondary",onClick:z=>h(t,x)},[_(N,{name:"trash",size:"sm",class:"mr-1"}),B(" "+u(a(r)("common.delete")),1)],8,xt)])])]))),128)),e("div",kt,[e("button",{type:"button",class:"btn btn-secondary",disabled:((($=c.all_of)==null?void 0:$.length)||0)>=50,onClick:g=>S(t)},[_(N,{name:"plus",size:"sm",class:"mr-1"}),B(" "+u(a(r)("admin.announcements.form.addAndCondition")),1)],8,wt)])])])}),128)),w.value?(D(),j("div",$t,u(w.value),1)):te("",!0)])):te("",!0)]))}}),St={class:"space-y-4"},At={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vt={class:"flex-1"},Tt=["placeholder"],zt=["disabled","title"],Ot={class:"font-medium text-gray-900 dark:text-white"},Dt={class:"font-medium text-gray-900 dark:text-white"},Et={class:"text-sm text-gray-500 dark:text-dark-400"},Ut={class:"flex justify-end"},Lt=me({__name:"AnnouncementReadStatusDialog",props:{show:{type:Boolean},announcementId:{}},emits:["close"],setup(G,{emit:n}){const{t:r}=fe(),M=he(),C=G,E=n,A=V(!1),b=V(""),p=J({page:1,page_size:ke(),total:0,pages:0}),U=J({sort_by:"email",sort_order:"asc"}),R=V([]),W=P(()=>[{key:"email",label:r("common.email"),sortable:!0},{key:"username",label:r("admin.users.columns.username"),sortable:!0},{key:"balance",label:r("common.balance"),sortable:!0},{key:"eligible",label:r("admin.announcements.eligible")},{key:"read_at",label:r("admin.announcements.readAt")}]);let v=null,F=null;function X(){A.value=!1,b.value="",R.value=[],p.page=1,p.total=0,p.pages=0,U.sort_by="email",U.sort_order="asc"}function S(y=!1){F&&(window.clearTimeout(F),F=null),v==null||v.abort(),v=null,y&&X()}async function h(){var o,d;if(!C.show||!C.announcementId)return;v==null||v.abort();const y=new AbortController;v=y;const{signal:w}=y;try{A.value=!0;const c=await K.announcements.getReadStatus(C.announcementId,p.page,p.page_size,{search:b.value,sort_by:U.sort_by,sort_order:U.sort_order},{signal:w});if(w.aborted||v!==y)return;R.value=c.items,p.total=c.total,p.pages=c.pages,p.page=c.page,p.page_size=c.page_size}catch(c){if(w.aborted||v!==y||(c==null?void 0:c.name)==="AbortError"||(c==null?void 0:c.code)==="ERR_CANCELED")return;console.error("Failed to load read status:",c),M.showError(((d=(o=c.response)==null?void 0:o.data)==null?void 0:d.detail)||r("admin.announcements.failedToLoadReadStatus"))}finally{v===y&&(A.value=!1,v=null)}}function Y(y){p.page=y,h()}function Z(y){p.page_size=y,p.page=1,h()}function I(y,w){U.sort_by=y,U.sort_order=w,p.page=1,h()}function T(){F&&window.clearTimeout(F),F=window.setTimeout(()=>{p.page=1,h()},300)}function L(){S(!0),E("close")}return ie(()=>C.show,y=>{if(!y){S(!0);return}p.page=1,h()}),ie(()=>C.announcementId,()=>{C.show&&(p.page=1,h())}),ye(()=>{S()}),(y,w)=>(D(),re(xe,{show:G.show,title:a(r)("admin.announcements.readStatus"),width:"extra-wide",onClose:L},{footer:k(()=>[e("div",Ut,[e("button",{type:"button",class:"btn btn-secondary",onClick:L},u(a(r)("common.close")),1)])]),default:k(()=>[e("div",St,[e("div",At,[e("div",Vt,[H(e("input",{"onUpdate:modelValue":w[0]||(w[0]=o=>b.value=o),type:"text",class:"input",placeholder:a(r)("admin.announcements.searchUsers"),onInput:T},null,40,Tt),[[Q,b.value]])]),e("button",{onClick:h,disabled:A.value,class:"btn btn-secondary",title:a(r)("common.refresh")},[_(N,{name:"refresh",size:"md",class:ne(A.value?"animate-spin":"")},null,8,["class"])],8,zt)]),_(we,{columns:W.value,data:R.value,loading:A.value,"server-side-sort":!0,"default-sort-key":"email","default-sort-order":"asc",onSort:I},{"cell-email":k(({value:o})=>[e("span",Ot,u(o),1)]),"cell-balance":k(({value:o})=>[e("span",Dt,"$"+u(Number(o??0).toFixed(2)),1)]),"cell-eligible":k(({value:o})=>[e("span",{class:ne(["badge",o?"badge-success":"badge-gray"])},u(o?a(r)("admin.announcements.eligible"):a(r)("common.no")),3)]),"cell-read_at":k(({value:o})=>[e("span",Et,u(o?a(ee)(o):a(r)("admin.announcements.unread")),1)]),_:1},8,["columns","data","loading"]),p.total>0?(D(),re($e,{key:0,page:p.page,total:p.total,"page-size":p.page_size,"onUpdate:page":Y,"onUpdate:pageSize":Z},null,8,["page","total","page-size"])):te("",!0)])]),_:1},8,["show","title"]))}}),Nt={class:"flex flex-wrap items-center gap-3"},Pt={class:"flex-1 sm:max-w-64"},Mt=["placeholder"],Rt={class:"flex flex-1 flex-wrap items-center justify-end gap-2"},Ft=["disabled","title"],jt={class:"min-w-0"},Bt={class:"flex items-center gap-2"},Jt={class:"truncate font-medium text-gray-900 dark:text-white"},Gt={class:"mt-1 flex items-center gap-2 text-xs text-gray-500 dark:text-dark-400"},qt={class:"text-sm text-gray-600 dark:text-gray-300"},Ht={class:"text-sm text-gray-600 dark:text-gray-300"},Qt={class:"font-medium"},Kt={class:"ml-1"},Wt={class:"mt-0.5"},Xt={class:"font-medium"},Yt={class:"ml-1"},Zt={class:"text-sm text-gray-500 dark:text-dark-400"},It={class:"flex items-center space-x-1"},en=["onClick","title"],tn=["onClick","title"],nn=["onClick","title"],an=["onClick","title"],sn={class:"input-label"},on={class:"input-label"},ln={class:"grid grid-cols-1 gap-4 md:grid-cols-2"},rn={class:"input-label"},dn={class:"input-label"},un={class:"input-hint"},cn={class:"grid grid-cols-1 gap-4 md:grid-cols-2"},mn={class:"input-label"},fn={class:"input-hint"},pn={class:"input-label"},_n={class:"input-hint"},gn={class:"flex justify-end gap-3"},bn=["disabled"],Mn=me({__name:"AnnouncementsView",setup(G){const{t:n}=fe(),r=he(),M=V([]),C=V(!1),E=J({status:""}),A=V(""),b=J({page:1,page_size:ke(),total:0,pages:0}),p=J({sort_by:"created_at",sort_order:"desc"}),U=P(()=>[{value:"",label:n("admin.announcements.allStatus")},{value:"draft",label:n("admin.announcements.statusLabels.draft")},{value:"active",label:n("admin.announcements.statusLabels.active")},{value:"archived",label:n("admin.announcements.statusLabels.archived")}]),R=P(()=>[{value:"draft",label:n("admin.announcements.statusLabels.draft")},{value:"active",label:n("admin.announcements.statusLabels.active")},{value:"archived",label:n("admin.announcements.statusLabels.archived")}]),W=P(()=>[{value:"silent",label:n("admin.announcements.notifyModeLabels.silent")},{value:"popup",label:n("admin.announcements.notifyModeLabels.popup")}]),v=P(()=>[{key:"title",label:n("admin.announcements.columns.title"),sortable:!0},{key:"status",label:n("admin.announcements.columns.status"),sortable:!0},{key:"notify_mode",label:n("admin.announcements.columns.notifyMode"),sortable:!0},{key:"targeting",label:n("admin.announcements.columns.targeting")},{key:"timeRange",label:n("admin.announcements.columns.timeRange")},{key:"created_at",label:n("admin.announcements.columns.createdAt"),sortable:!0},{key:"actions",label:n("admin.announcements.columns.actions")}]),F=s=>s==="draft"?n("admin.announcements.statusLabels.draft"):s==="active"?n("admin.announcements.statusLabels.active"):s==="archived"?n("admin.announcements.statusLabels.archived"):s,X=s=>{const l=(s==null?void 0:s.any_of)??[];return!l||l.length===0?n("admin.announcements.targetingSummaryAll"):n("admin.announcements.targetingSummaryCustom",{groups:l.length})};let S=null;async function h(){var i,O;S==null||S.abort();const s=new AbortController;S=s;const{signal:l}=s;try{C.value=!0;const f=await K.announcements.list(b.page,b.page_size,{status:E.status||void 0,search:A.value||void 0,sort_by:p.sort_by,sort_order:p.sort_order},{signal:l});if(l.aborted||S!==s)return;M.value=f.items,b.total=f.total,b.pages=f.pages,b.page=f.page,b.page_size=f.page_size}catch(f){if(l.aborted||S!==s||(f==null?void 0:f.name)==="AbortError"||(f==null?void 0:f.code)==="ERR_CANCELED")return;console.error("Error loading announcements:",f),r.showError(((O=(i=f.response)==null?void 0:i.data)==null?void 0:O.detail)||n("admin.announcements.failedToLoad"))}finally{S===s&&(C.value=!1,S=null)}}function Y(s){b.page=s,h()}function Z(s){b.page_size=s,b.page=1,h()}function I(){b.page=1,h()}function T(s,l){p.sort_by=s,p.sort_order=l,b.page=1,h()}let L=null;function y(){L&&window.clearTimeout(L),L=window.setTimeout(()=>{b.page=1,h()},300)}const w=V(!1),o=V(!1),d=V(null),c=P(()=>!!d.value),t=J({title:"",content:"",status:"draft",notify_mode:"silent",starts_at_str:"",ends_at_str:"",targeting:{any_of:[]}}),m=V([]);async function $(){try{const s=await K.groups.getAll();m.value=(s||[]).filter(l=>l.subscription_type==="subscription")}catch(s){console.error("Error loading groups:",s)}}function g(){t.title="",t.content="",t.status="draft",t.notify_mode="silent",t.starts_at_str="",t.ends_at_str="",t.targeting={any_of:[]}}function x(s){t.title=s.title,t.content=s.content,t.status=s.status,t.notify_mode=s.notify_mode||"silent",t.starts_at_str=s.starts_at?ve(Math.floor(new Date(s.starts_at).getTime()/1e3)):"",t.ends_at_str=s.ends_at?ve(Math.floor(new Date(s.ends_at).getTime()/1e3)):"",t.targeting=s.targeting??{any_of:[]}}function z(){d.value=null,g(),w.value=!0}function de(s){d.value=s,x(s),w.value=!0}function pe(){w.value=!1,d.value=null}function Ce(){const s=le(t.starts_at_str),l=le(t.ends_at_str);return{title:t.title,content:t.content,status:t.status,notify_mode:t.notify_mode,targeting:t.targeting,starts_at:s??void 0,ends_at:l??void 0}}function Se(s){const l={};t.title!==s.title&&(l.title=t.title),t.content!==s.content&&(l.content=t.content),t.status!==s.status&&(l.status=t.status),t.notify_mode!==(s.notify_mode||"silent")&&(l.notify_mode=t.notify_mode);const i=s.starts_at?Math.floor(new Date(s.starts_at).getTime()/1e3):null,O=s.ends_at?Math.floor(new Date(s.ends_at).getTime()/1e3):null,f=le(t.starts_at_str),q=le(t.ends_at_str);return f!==i&&(l.starts_at=f===null?0:f),q!==O&&(l.ends_at=q===null?0:q),JSON.stringify(t.targeting??{})!==JSON.stringify(s.targeting??{})&&(l.targeting=t.targeting),l}async function Ae(){var l,i,O;const s=((l=t.targeting)==null?void 0:l.any_of)??[];
1if(s.length>50){r.showError(n("admin.announcements.failedToCreate"));return}for(const f of s)if(((f==null?void 0:f.all_of)??[]).length>50){r.showError(n("admin.announcements.failedToCreate"));return}o.value=!0;try{if(!d.value){const De=Ce();await K.announcements.create(De),r.showSuccess(n("common.success")),w.value=!1,await h();return}const f=d.value,q=Se(f);await K.announcements.update(f.id,q),r.showSuccess(n("common.success")),w.value=!1,d.value=null,await h()}catch(f){console.error("Failed to save announcement:",f),r.showError(((O=(i=f.response)==null?void 0:i.data)==null?void 0:O.detail)||(d.value?n("admin.announcements.failedToUpdate"):n("admin.announcements.failedToCreate")))}finally{o.value=!1}}const se=V(!1),oe=V(null);function Ve(s){oe.value=s,se.value=!0}async function Te(){var s,l;if(oe.value)try{await K.announcements.delete(oe.value.id),r.showSuccess(n("common.success")),se.value=!1,oe.value=null,await h()}catch(i){console.error("Failed to delete announcement:",i),r.showError(((l=(s=i.response)==null?void 0:s.data)==null?void 0:l.detail)||n("admin.announcements.failedToDelete"))}}const ue=V(!1),_e=V(null),ce=V(null);function ze(s){ce.value=s}function Oe(s){_e.value=s.id,ue.value=!0}return Ee(async()=>{await $(),await h()}),ye(()=>{L&&window.clearTimeout(L),S==null||S.abort()}),(s,l)=>(D(),re(Ne,null,{default:k(()=>[_(Pe,null,{filters:k(()=>[e("div",Nt,[e("div",Pt,[H(e("input",{"onUpdate:modelValue":l[0]||(l[0]=i=>A.value=i),type:"text",placeholder:a(n)("admin.announcements.searchAnnouncements"),class:"input",onInput:y},null,40,Mt),[[Q,A.value]])]),_(ae,{modelValue:E.status,"onUpdate:modelValue":l[1]||(l[1]=i=>E.status=i),options:U.value,class:"w-40",onChange:I},null,8,["modelValue","options"]),e("div",Rt,[e("button",{onClick:h,disabled:C.value,class:"btn btn-secondary",title:a(n)("common.refresh")},[_(N,{name:"refresh",size:"md",class:ne(C.value?"animate-spin":"")},null,8,["class"])],8,Ft),e("button",{onClick:z,class:"btn btn-primary"},[_(N,{name:"plus",size:"md",class:"mr-1"}),B(" "+u(a(n)("admin.announcements.createAnnouncement")),1)])])])]),table:k(()=>[_(we,{columns:v.value,data:M.value,loading:C.value,"server-side-sort":!0,"default-sort-key":"created_at","default-sort-order":"desc",onSort:T},{"cell-title":k(({value:i,row:O})=>[e("div",jt,[e("div",Bt,[e("span",Jt,u(i),1)]),e("div",Gt,[e("span",null,"#"+u(O.id),1),l[12]||(l[12]=e("span",{class:"text-gray-300 dark:text-dark-700"},"·",-1)),e("span",null,u(a(ee)(O.created_at)),1)])])]),"cell-status":k(({value:i})=>[e("span",{class:ne(["badge",i==="active"?"badge-success":i==="draft"?"badge-gray":"badge-warning"])},u(F(i)),3)]),"cell-notify_mode":k(({row:i})=>[e("span",{class:ne(["badge",i.notify_mode==="popup"?"badge-warning":"badge-gray"])},u(i.notify_mode==="popup"?a(n)("admin.announcements.notifyModeLabels.popup"):a(n)("admin.announcements.notifyModeLabels.silent")),3)]),"cell-targeting":k(({row:i})=>[e("span",qt,u(X(i.targeting)),1)]),"cell-timeRange":k(({row:i})=>[e("div",Ht,[e("div",null,[e("span",Qt,u(a(n)("admin.announcements.form.startsAt"))+":",1),e("span",Kt,u(i.starts_at?a(ee)(i.starts_at):a(n)("admin.announcements.timeImmediate")),1)]),e("div",Wt,[e("span",Xt,u(a(n)("admin.announcements.form.endsAt"))+":",1),e("span",Yt,u(i.ends_at?a(ee)(i.ends_at):a(n)("admin.announcements.timeNever")),1)])])]),"cell-created_at":k(({value:i})=>[e("span",Zt,u(a(ee)(i)),1)]),"cell-actions":k(({row:i})=>[e("div",It,[e("button",{onClick:O=>ze(i),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400",title:a(n)("admin.announcements.preview")},[_(N,{name:"eye",size:"sm"})],8,en),e("button",{onClick:O=>Oe(i),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400",title:a(n)("admin.announcements.readStatus")},[_(N,{name:"chartBar",size:"sm"})],8,tn),e("button",{onClick:O=>de(i),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:hover:bg-dark-600 dark:hover:text-gray-300",title:a(n)("common.edit")},[_(N,{name:"edit",size:"sm"})],8,nn),e("button",{onClick:O=>Ve(i),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-900/20 dark:hover:text-red-400",title:a(n)("common.delete")},[_(N,{name:"trash",size:"sm"})],8,an)])]),empty:k(()=>[_(Re,{title:a(n)("empty.noData"),description:a(n)("admin.announcements.createFirstAnnouncement"),"action-text":a(n)("admin.announcements.createAnnouncement"),onAction:z},null,8,["title","description","action-text"])]),_:1},8,["columns","data","loading"])]),pagination:k(()=>[b.total>0?(D(),re($e,{key:0,page:b.page,total:b.total,"page-size":b.page_size,"onUpdate:page":Y,"onUpdate:pageSize":Z},null,8,["page","total","page-size"])):te("",!0)]),_:1}),_(xe,{show:w.value,title:c.value?a(n)("admin.announcements.editAnnouncement"):a(n)("admin.announcements.createAnnouncement"),width:"wide",onClose:pe},{footer:k(()=>[e("div",gn,[e("button",{type:"button",onClick:pe,class:"btn btn-secondary"},u(a(n)("common.cancel")),1),e("button",{type:"submit",form:"announcement-form",disabled:o.value,class:"btn btn-primary"},u(o.value?a(n)("common.saving"):a(n)("common.save")),9,bn)])]),default:k(()=>[e("form",{id:"announcement-form",onSubmit:Ue(Ae,["prevent"]),class:"space-y-4"}
1,[e("div",null,[e("label",sn,u(a(n)("admin.announcements.form.title")),1),H(e("input",{"onUpdate:modelValue":l[2]||(l[2]=i=>t.title=i),type:"text",class:"input",required:""},null,512),[[Q,t.title]])]),e("div",null,[e("label",on,u(a(n)("admin.announcements.form.content")),1),H(e("textarea",{"onUpdate:modelValue":l[3]||(l[3]=i=>t.content=i),rows:"6",class:"input",required:""},null,512),[[Q,t.content]])]),e("div",ln,[e("div",null,[e("label",rn,u(a(n)("admin.announcements.form.status")),1),_(ae,{modelValue:t.status,"onUpdate:modelValue":l[4]||(l[4]=i=>t.status=i),options:R.value},null,8,["modelValue","options"])]),e("div",null,[e("label",dn,u(a(n)("admin.announcements.form.notifyMode")),1),_(ae,{modelValue:t.notify_mode,"onUpdate:modelValue":l[5]||(l[5]=i=>t.notify_mode=i),options:W.value},null,8,["modelValue","options"]),e("p",un,u(a(n)("admin.announcements.form.notifyModeHint")),1)])]),e("div",cn,[e("div",null,[e("label",mn,u(a(n)("admin.announcements.form.startsAt")),1),H(e("input",{"onUpdate:modelValue":l[6]||(l[6]=i=>t.starts_at_str=i),type:"datetime-local",max:"9999-12-31T23:59",class:"input"},null,512),[[Q,t.starts_at_str]]),e("p",fn,u(a(n)("admin.announcements.form.startsAtHint")),1)]),e("div",null,[e("label",pn,u(a(n)("admin.announcements.form.endsAt")),1),H(e("input",{"onUpdate:modelValue":l[7]||(l[7]=i=>t.ends_at_str=i),type:"datetime-local",max:"9999-12-31T23:59",class:"input"},null,512),[[Q,t.ends_at_str]]),e("p",_n,u(a(n)("admin.announcements.form.endsAtHint")),1)])]),_(Ct,{modelValue:t.targeting,"onUpdate:modelValue":l[8]||(l[8]=i=>t.targeting=i),groups:m.value},null,8,["modelValue","groups"])],32)]),_:1},8,["show","title"]),_(Me,{show:se.value,title:a(n)("admin.announcements.deleteAnnouncement"),message:a(n)("admin.announcements.deleteConfirm"),"confirm-text":a(n)("common.delete"),"cancel-text":a(n)("common.cancel"),danger:"",onConfirm:Te,onCancel:l[9]||(l[9]=i=>se.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"]),_(Lt,{show:ue.value,"announcement-id":_e.value,onClose:l[10]||(l[10]=i=>ue.value=!1)},null,8,["show","announcement-id"]),_(Le,{announcement:ce.value,preview:"",onClose:l[11]||(l[11]=i=>ce.value=null)},null,8,["announcement"])]),_:1}))}});export{Mn 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.