1import{a as y,h as $,r as k,j as e,g as D}from"./index-DY8EaXsZ.js";import{I as E}from"./InfoHint-C_eQlZhK.js";import{u as P,S as R,P as T}from"./usePagedList-De335O21.js";import{u as A}from"./DialogContext-BTnzTWqX.js";const L="/api";async function g(s,d,t){const i=await fetch(`${L}${s}`,{method:d,credentials:"include",headers:t?{"Content-Type":"application/json"}:void 0,body:t?JSON.stringify(t):void 0}),n=await i.json().catch(()=>({}));return{ok:i.ok&&(n==null?void 0:n.ok)!==!1,status:i.status,error:n==null?void 0:n.error}}const q=s=>g(`/admin/messages/${s}`,"GET"),M=(s,d)=>g(`/admin/messages/${s}`,"PATCH",{read:d}),B=s=>g(`/admin/messages/${s}`,"DELETE");function J(){const{t:s}=y(),d=$(),{confirm:t,toast:i}=A(),[n,c]=k.useState(null),[l,S]=k.useState(""),{page:C,setPage:j,items:x,data:r,total:u,pageCount:v,isLoading:p}=P(["admin-messages",l],({page:a,pageSize:o})=>D(`/admin/messages?page=${a}&pageSize=${o}${l?`&q=${encodeURIComponent(l)}`:""}`).then(h=>({items:h.messages,total:h.total,unread:h.unread}))),w=a=>{S(a),j(1)},m=()=>d.invalidateQueries({queryKey:["admin-messages"]}),f=async a=>{c(a),a.read||(await q(a.id),m())},N=async a=>{(await M(a.id,!a.read)).ok?((n==null?void 0:n.id)===a.id&&c({...a,read:!a.read}),m()):i(s("admin.messages.errors.generic"))},b=async a=>{if(!await t(s("admin.messages.confirmDelete",{name:a.name})))return;(await B(a.id)).ok?((n==null?void 0:n.id)===a.id&&c(null),m()):i(s("admin.messages.errors.generic"))};return e.jsxs("section",{className:"admin-page",children:[e.jsxs("div",{className:"admin-page-head",children:[e.jsxs("div",{className:"admin-head-title",children:[e.jsx("h1",{children:s("admin.messages.title")}),e.jsx(E,{what:s("admin.messages.info.what"),how:s("admin.messages.info.how")})]}),r&&r.unread>0&&e.jsx("span",{className:"badge badge-blocked",children:s("admin.messages.unreadCount",{count:r.unread})})]}),e.jsx("div",{className:"admin-toolbar",children:e.jsx(R,{onSearch:w})}),p&&e.jsx("p",{className:"muted",children:s("admin.loading")}),!p&&u===0&&e.jsx("p",{className:"muted",children:s("admin.messages.empty")}),x.length>0&&e.jsxs("div",{className:"admin-inbox",children:[e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:s("admin.messages.colFrom")}),e.jsx("th",{children:s("admin.messages.colSubject")}),e.jsx("th",{children:s("admin.messages.colDate")}),e.jsx("th",{children:s("admin.messages.colActions")})]})}),e.jsx("tbody",{children:x.map(a=>e.jsxs("tr",{className:[a.read?"":"is-unread",(n==null?void 0:n.id)===a.id?"is-selected":""].filter(Boolean).join(" ")||void 0,children:[e.jsx("td",{children:e.jsxs("button",{className:"link-cell",onClick:()=>f(a),children:[!a.read&&e.jsx("span",{className:"dot-unread","aria-hidden":!0}),e.jsx("strong",{children:a.name}),e.jsxs("span",{className:"muted",children:[" · ",a.email]})]})}),e.jsx("td",{children:e.jsx("button",{className:"link-cell",onClick:()=>f(a),children:a.subject||e.jsx("span",{className:"muted",children:s("admin.messages.noSubject")})})}),e.jsx("td",{className:"muted",children:new Date(a.createdAt).toLocaleString()}),e.jsxs("td",{className:"admin-actions",children:[e.jsx("button",{onClick:()=>N(a),children:a.read?s("admin.messages.markUnread"):s("admin.messages.markRead")}),e.jsx("button",{className:"danger",onClick:()=>b(a),children:s("admin.messages.delete")})]})]},a.id))})]}),e.jsx(T,{page:C,pageCount:v,total:u,onPage:j}),n&&e.jsxs("article",{className:"message-detail",children:[e.jsxs("header",{className:"message-detail-head",children:[e.jsx("h2",{children:n.subject||s("admin.messages.noSubject")}),e.jsx("button",{className:"message-close",onClick:()=>c(null),"aria-label":s("admin.messages.close"),children:"Ã"})]}),e.jsxs("dl",{className:"message-meta",children:[e.jsxs("div",{children:[e.jsx("dt",{children:s("admin.messages.from")}),e.jsx("dd",{children:n.name})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("admin.messages.email")}),e.jsx("dd",{children:e.jsx("a",{href:`mailto:${n.email}`,children:n.email})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("admin.messages.date")}
1),e.jsx("dd",{children:new Date(n.createdAt).toLocaleString()})]})]}),e.jsx("p",{className:"message-body",children:n.message}),e.jsxs("div",{className:"message-detail-actions",children:[e.jsx("a",{className:"btn-pri",href:`mailto:${n.email}`,children:s("admin.messages.reply")}),e.jsx("button",{onClick:()=>N(n),children:n.read?s("admin.messages.markUnread"):s("admin.messages.markRead")}),e.jsx("button",{className:"danger",onClick:()=>b(n),children:s("admin.messages.delete")})]})]})]})]})}export{J 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.