PageSourceSearch

https://www.seanews.com.tr/assets/AdminNewsletters-BaktPtME.js

js seanews.com.tr collected 2026-10-02 11:17:40 UTC 8,652 bytes, 1 lines download raw bytes

1import{f as T,a as k,b as w,j as e,g as F,B as n,L as i,k as o,m as c,n as m,l as x,h as b,p as M}from"./index-DvhEnGG3.js";import{u as N}from"./useMutation-5Qt1sQt-.js";import{A as q}from"./AdminLayout-Zrrm2zl0.js";import{g as A,a as h}from"./adminAuth-DLSKqndo.js";import{R as y}from"./refresh-cw-D6IW0zNF.js";import{C as P}from"./calendar-BTJHFAW8.js";import{U as v}from"./users-BdUbaTLb.js";import{E as $}from"./eye-BKoNgi8M.js";import{S as D}from"./send-C33hwHzg.js";import{T as R}from"./trash-2-DvlTil9x.js";import{f as K}from"./format-CxxDD1Zd.js";import"./chart-column-DZJB8hAl.js";import"./file-text-DsmeFF5q.js";import"./folder-open-Dfep7Pji.js";import"./message-square-Dgp5wLTg.js";import"./video-Cp2pAFso.js";import"./book-open-BX1a14hQ.js";import"./trending-up-CmFiU1GD.js";import"./anchor-DHgUDgz1.js";import"./calendar-days-BeDpXHdp.js";import"./building-2-DUT4rmqF.js";import"./vote-oaa0C-Bt.js";import"./en-US-BF8dUB01.js";function le(){const{toast:r}=T(),u=k(),l=A(),{data:p}=w({queryKey:["/api/newsletters/email-status"],queryFn:()=>fetch("/api/newsletters/email-status").then(t=>t.json())}),{data:d=[],isLoading:S}=w({queryKey:["/api/newsletters",l],queryFn:()=>fetch("/api/newsletters").then(t=>t.json()),enabled:!!l}),{data:C=[]}=w({queryKey:["/api/admin/subscribers",l],queryFn:async()=>{const t=await h("/api/admin/subscribers");if(!t.ok)throw new Error("Failed to fetch subscribers");return t.json()},enabled:!!l}),a=N({mutationFn:async(t=!1)=>{const s=await h("/api/newsletters/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({force:t})});if(!s.ok)throw new Error("Failed to generate newsletter");return s.json()},onSuccess:t=>{u.invalidateQueries({queryKey:["/api/newsletters"]}),r({title:t.regenerated?"Newsletter Regenerated":"Newsletter Generated",description:t.regenerated?"Today's newsletter has been regenerated with the latest articles.":t.message||"Today's newsletter has been created successfully."})},onError:()=>{r({title:"Error",description:"Failed to generate newsletter",variant:"destructive"})}}),j=N({mutationFn:async t=>{const s=await h(`/api/newsletters/${t}/send`,{method:"POST"});if(!s.ok){const f=await s.json();throw new Error(f.error||"Failed to send newsletter")}return s.json()},onSuccess:t=>{u.invalidateQueries({queryKey:["/api/newsletters"]}),r({title:"Newsletter Sent!",description:`Successfully sent to ${t.sentCount} subscribers.`})},onError:t=>{r({title:"Error",description:t.message,variant:"destructive"})}}),g=N({mutationFn:async t=>{const s=await h(`/api/newsletters/${t}`,{method:"DELETE"});if(!s.ok){const f=await s.json();throw new Error(f.error||"Failed to delete newsletter")}return s.json()},onSuccess:()=>{u.invalidateQueries({queryKey:["/api/newsletters"]}),r({title:"Newsletter Deleted",description:"The draft newsletter has been deleted successfully."})},onError:t=>{r({title:"Error",description:t.message,variant:"destructive"})}}),E=C.filter(t=>t.isActive).length;return e.jsx(q,{children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{className:"h-6 w-6 text-primary"}),e.jsx("h1",{className:"text-2xl font-bold","data-testid":"text-page-title",children:"Newsletter Management"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(n,{onClick:()=>a.mutate(!1),disabled:a.isPending,"data-testid":"button-generate-newsletter",children:[a.isPending?e.jsx(i,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(y,{className:"h-4 w-4 mr-2"}),"Generate Newsletter"]}),e.jsxs(n,{variant:"outline",onClick:()=>a.mutate(!0),disabled:a.isPending,"data-testid":"button-regenerate-newsletter",children:[a.isPending?e.jsx(i,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(y,{className:"h-4 w-4 mr-2"}),"Regenerate"]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 mb-8",children:[e.jsxs(o,{children:[e.jsx(c,{className:"pb-2",children:e.jsx(m,{className:"text-sm text-muted-foreground",children:"Total Newsletters"})}),e.jsx(x,{children:e.jsx("div",{className:"text-3xl font-bold","data-testid":"text-total-newsletters",children:d.length})})]}),e.jsxs(o,{children:[e.jsx(c,{className:"pb-2",children:e.jsx(m,{className:"text-sm text-muted-foreground",children:"Active Subscribers"})}),e.jsx(x,{children:e.jsx("div",{className:"text-3xl font-bold","data-testid":"text-active-subscribers",children:E})})]}),e.jsxs(o,{children:[e.jsx(c,{className:"pb-2",children:e.jsx(m,{className:"text-sm text-muted-foreground",children:"Sent This Month"})}),e.jsx(x,{children:e.jsx("div",{className:"text-3xl font-bold","data-testid":"text-sent-this-month",children:d.filter(t=>t.isSent&&new Date(t.sentAt||"").getMonth()===new Date().getMonth()).length})})]})]}),p?.configured?e.jsxs("div",{className:"mb-6 p-4 bg-green-50 border border-green-200 rounded-lg flex items-center gap-3",children:[e.jsx(b,{className:"h-5 w-5 text-green-600"}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-bold text-green-800",children:"Email Integration Active"}),e.jsxs("p",{className:"text-green-700 text-sm",children:["Connected via ",p.provider,". You can send newsletters to 
1subscribers."]})]})]}):e.jsxs("div",{className:"mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg",children:[e.jsx("h3",{className:"font-bold text-yellow-800 mb-2",children:"Email Integration Required"}),e.jsx("p",{className:"text-yellow-700 text-sm",children:"To send newsletters to subscribers, you need to set up an email integration (SendGrid or Resend). The newsletters are being generated and archived, but sending is disabled until email integration is configured."})]}),e.jsxs(o,{children:[e.jsx(c,{children:e.jsx(m,{children:"Newsletter Archive"})}),e.jsx(x,{children:S?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(i,{className:"h-8 w-8 animate-spin text-muted-foreground"})}):d.length===0?e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:"No newsletters yet. Generate your first newsletter to get started."}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b",children:[e.jsx("th",{className:"text-left py-3 px-4 font-medium",children:"Title"}),e.jsx("th",{className:"text-left py-3 px-4 font-medium",children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(P,{className:"h-4 w-4"}),"Created"]})}),e.jsx("th",{className:"text-left py-3 px-4 font-medium",children:"Status"}),e.jsx("th",{className:"text-left py-3 px-4 font-medium",children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(v,{className:"h-4 w-4"}),"Sent To"]})}),e.jsx("th",{className:"text-right py-3 px-4 font-medium",children:"Actions"})]})}),e.jsx("tbody",{children:d.map(t=>e.jsxs("tr",{className:"border-b hover:bg-muted/50","data-testid":`row-newsletter-${t.id}`,children:[e.jsx("td",{className:"py-3 px-4 font-medium",children:t.title}),e.jsx("td",{className:"py-3 px-4 text-muted-foreground",children:K(new Date(t.createdAt),"MMM d, yyyy")}),e.jsx("td",{className:"py-3 px-4",children:t.isSent?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-green-100 text-green-700 rounded text-sm",children:[e.jsx(b,{className:"h-3 w-3"}),"Sent"]}):e.jsx("span",{className:"px-2 py-1 bg-yellow-100 text-yellow-700 rounded text-sm",children:"Draft"})}),e.jsx("td",{className:"py-3 px-4",children:t.isSent?e.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[e.jsx(v,{className:"h-4 w-4"}),t.sentCount]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx("td",{className:"py-3 px-4 text-right",children:e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(M,{href:`/newsletter/${t.slug}`,children:e.jsxs(n,{variant:"outline",size:"sm","data-testid":`button-preview-${t.id}`,children:[e.jsx($,{className:"h-4 w-4 mr-1"}),"Preview"]})}),!t.isSent&&e.jsxs(e.Fragment,{children:[e.jsxs(n,{size:"sm",disabled:!p?.configured||j.isPending,onClick:()=>j.mutate(t.id),"data-testid":`button-send-${t.id}`,children:[j.isPending?e.jsx(i,{className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(D,{className:"h-4 w-4 mr-1"}),"Send"]}),e.jsxs(n,{size:"sm",variant:"destructive",disabled:g.isPending,onClick:()=>{confirm("Are you sure you want to delete this draft newsletter?")&&g.mutate(t.id)},"data-testid":`button-delete-${t.id}`,children:[g.isPending?e.jsx(i,{className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(R,{className:"h-4 w-4 mr-1"}),"Delete"]})]})]})})]},t.id))})]})})})]})]})})}export{le 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.