1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1646],{1646:(e,s,t)=>{t.r(s),t.d(s,{default:()=>m});var a=t(95155),l=t(12115),r=t(70528),n=t(60800),o=t(71925),d=t(72040),c=t(66898);let i="/api/admin/city-chats";function m(e){let{adminHeaders:s}=e,[t,m]=(0,l.useState)("rooms"),x=(0,d.v_)("rooms"===t?`${i}?view=rooms`:null,s,e=>e.rooms??[]),p=(0,d.v_)("reports"===t?`${i}?view=reports`:null,s,e=>e.reports??[]),[g,h]=(0,l.useState)(null),[u,j]=(0,l.useState)({}),[b,f]=(0,l.useState)(null),[N,k]=(0,l.useState)(null);async function v(e){if(h(e),!u[e.groupId])try{let t=await fetch(`${i}?view=messages&groupId=${encodeURIComponent(e.groupId)}`,{headers:s,cache:"no-store"}),a=await t.json();j(s=>({...s,[e.groupId]:a.messages??[]}))}catch{j(s=>({...s,[e.groupId]:[]}))}}async function w(e,t){f(null),(await fetch(`${i}?${e}`,{method:"DELETE",headers:s})).ok?t():k("That could not be removed.")}let y=(e,s)=>w(`groupId=${encodeURIComponent(e)}&messageId=${encodeURIComponent(s)}`,()=>{j(t=>({...t,[e]:(t[e]??[]).filter(e=>e.id!==s)})),p.setData(t=>t&&t.map(t=>t.groupId===e&&t.messageId===s?{...t,messageDeleted:!0,messageText:""}:t))}),I="rooms"===t?x:p;return(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)(c.M7,{children:[(0,a.jsx)(c.C4,{value:t,options:[{key:"rooms",label:"Rooms"},{key:"reports",label:"Reports"}],onChange:e=>{m(e),h(null)}}),g&&(0,a.jsx)("button",{onClick:()=>h(null),className:n.Qq,children:"Back to rooms"})]}),(I.error||N)&&(0,a.jsx)(c.L7,{tone:"error",children:I.error||N}),"rooms"===t&&!g&&(!x.data&&x.loading?(0,a.jsx)(c.Qv,{rows:8}):(0,a.jsx)("section",{className:c.PE,children:(0,a.jsx)(c.XI,{rows:x.data??[],rowKey:e=>e.groupId,defaultSort:"last",onRow:e=>void v(e),empty:"No city chat rooms yet.",cols:[{key:"city",label:"City",cell:e=>(0,a.jsxs)("span",{className:"font-semibold text-[#111] dark:text-[#ededed]",children:[e.city||e.cc," ",(0,a.jsx)("span",{className:"font-normal text-[#8a8f98] dark:text-[#8b8b8b]",children:e.cc})]}),sort:e=>e.city||e.cc},{key:"week",label:"Week",nowrap:!0,className:"text-[#8a8f98] dark:text-[#8b8b8b]",cell:e=>e.weekKey,sort:e=>e.weekKey},{key:"messages",label:"Messages",align:"right",sort:e=>e.messageCount,cell:e=>e.messageCount},{key:"members",label:"Members",align:"right",sort:e=>e.memberCount,cell:e=>e.memberCount},{key:"last",label:"Last activity",nowrap:!0,className:"text-[#8a8f98] dark:text-[#8b8b8b]",sort:e=>e.lastMessageAt,cell:e=>(0,o.aO)(e.lastMessageAt)},{key:"preview",label:"Latest",cell:e=>(0,a.jsx)("span",{className:"line-clamp-1 text-[#8a8f98] dark:text-[#8b8b8b]",children:e.lastMessagePreview})}]})})),"rooms"===t&&g&&(0,a.jsxs)("div",{className:c.PE,children:[(0,a.jsxs)("div",{className:"flex min-h-[36px] items-center justify-between gap-3 px-1 pb-2",children:[(0,a.jsxs)("p",{className:`text-[14px] font-semibold ${n.Kx}`,children:[g.city||g.cc," ",(0,a.jsxs)("span",{className:"font-normal text-[#8a8f98] dark:text-[#8b8b8b]",children:[g.cc," \xb7 week ",g.weekKey]})]}),(0,a.jsxs)("span",{className:`text-[13px] ${n.gN}`,children:[g.memberCount," members"]})]}),(0,a.jsx)("div",{className:`${n.Pc} flex flex-col p-2`,children:u[g.groupId]?0===u[g.groupId].length?(0,a.jsx)("p",{className:`px-4 py-10 text-center text-[13px] ${n.gN}`,children:"No messages."}):u[g.groupId].map(e=>(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 rounded-[10px] px-2 py-2.5 transition-colors hover:bg-white dark:hover:bg-[#1f1f1f]",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:r.Ge,children:[(0,a.jsx)("span",{className:"font-semibold text-[#111] dark:text-[#ededed]",children:e.senderTag?`@${e.senderTag}`:e.senderName}),(0,a.jsx)("span",{children:(0,o.aO)(e.createdAt)})]}),(0,a.jsx)("p",{className:"mt-0.5 whitespace-pre-line text-[13px] leading-relaxed text-[#111] dark:text-[#ededed]",children:e.text})]}),(0,a.jsx)(r.Sk,{open:b===e.id,onOpen:()=>f(e.id),onCancel:()=>f(null),onConfirm:()=>void y(g.groupId,e.id)})]},e.id)):(0,a.jsx)("p",{className:`px-4 py-10 text-center text-[13px] ${n.gN}`,children:"Loadingâ¦"})})]}),"reports"===t&&(!p.data&&p.loading?(0,a.jsx)(c.Qv,{rows:6}):0===(p.data??[]).length?(0,a.jsx)(c.Sv,{text:"No reported messages. Nothing to look at."}):(0,a.jsx)("section",{className:c.PE,children:(0,a.jsx)("div",{className:`${n.Pc} grid items-start gap-3 p-2 lg:grid-cols-2`,children:(p.data??[]).map(e=>(0,a.jsxs)("div",{className:`${n.Uo} flex flex-col gap-3`,children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,a.jsx)("span",{className:`truncate text-[14px] font-semibold ${n.Kx}`,children:e.groupId}),e.messageDeleted?(0,a.jsx)(c.vw,{tone:"warn",children:"Message deleted"}):(0,a.jsx)(c.vw,{children:"Reported"})]}),(0,a.jsx)("p",{className:"whitespace-pre-line text-[13px] leading-relaxed text-[#111] dark:text-[#ededed]",children:e.messageDeleted?"":e.messageText||"(message not found)"}),(0,a.jsxs)("div",{className:r.Ge,children:[(0,a.jsxs)("span",{children:["sender ",e.senderId.slice(0,8)]}),(0,a.jsxs)("span",{children:["reporter ",e.reporterId.slice(0,8)]}),e.reason&&(0,a.jsx)("span",{children:e.reason}),(0,a.jsx)("span",{children:(0,o.aO)(e.createdAt)})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[!e.messageDeleted&&e.messageId&&(0,a.jsx)(r.Sk,{label:"Delete message",open:b===`m-${e.id}`,onOpen:()=>f(`m-${e.id}`),onCancel:()=>f(null),onConfirm:()=>void y(e.groupId,e.messageId)}),(0,a.jsx)("button",{onClick:()=>{let s,t;s=e.groupId,t=e.id,w(`groupId=${encodeURIComponent(s)}&reportId=${encodeURIComponent(t)}`,()=>p.setData(e=>e&&e.filter(e=>e.id!==t)))},className:n.Qq,children:"Dismiss report"})]})]},e.id))})}))]})}}}]);
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.