Files
igny8/frontend/dist/assets/js/pages-writer-BNZLXTX1.js
2025-11-10 06:41:37 +00:00

2 lines
18 KiB
JavaScript

import{j as t,r as s}from"./vendor-react-core-DjsjKnCi.js";import{P as ie,C as ke}from"./page-analytics.tsx-1KCk8AGD.js";import{u as ae}from"./page-reference-aC0iABvU.js";import{W as be,X as Se,Y as _e,Z as we,$ as je,a0 as Ce,o as Ie,a1 as Te,a2 as Ne,a3 as ve,a4 as Fe,a5 as le}from"./page-dashboard-DxYTR5eF.js";import{C as De}from"./page-components.tsx-DYfg5dka.js";import{u as Ee,a as Me,b as Oe,T as de,c as Pe,F as $e}from"./pages-planner-Biqt-k6C.js";import{a as ue,o as Ae,s as Be,t as Le}from"./page-authpages-CY7hjDHU.js";import{c as Re}from"./page-images.config.tsx-Dy4DVDQH.js";import{c as ze}from"./page-tasks.config.tsx-mmlIGC4l.js";function qe(){return t.jsxs(t.Fragment,{children:[t.jsx(ie,{title:"Writer Dashboard - IGNY8",description:"Content creation overview"}),t.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3 md:gap-6 mb-6",children:[t.jsxs("div",{className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6",children:[t.jsx("span",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Tasks"}),t.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:"-"}),t.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Queued tasks"})]}),t.jsxs("div",{className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6",children:[t.jsx("span",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Drafts"}),t.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:"-"}),t.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Draft content"})]}),t.jsxs("div",{className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6",children:[t.jsx("span",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Published"}),t.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:"-"}),t.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Published content"})]})]}),t.jsx(ke,{title:"Coming Soon",desc:"Content creation overview",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Writer Dashboard - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Overview of content tasks and workflow will be displayed here"})]})})]})}const st=Object.freeze(Object.defineProperty({__proto__:null,default:qe},Symbol.toStringTag,{value:"Module"}));function re(){const o=ae(),{activeSector:j}=Ee(),{pageSize:D}=Me(),[C,E]=s.useState([]),[b,L]=s.useState([]),[I,m]=s.useState(!0),[x,$]=s.useState(""),[M,R]=s.useState(""),[y,T]=s.useState(""),[O,z]=s.useState(""),[S,q]=s.useState(""),[A,Q]=s.useState([]),[N,v]=s.useState(1),[X,G]=s.useState(1),[_,Z]=s.useState(0),[B,K]=s.useState("created_at"),[f,ee]=s.useState("desc"),[n,u]=s.useState(!1),[F,k]=s.useState(!1),[U,V]=s.useState(!1),[ne,oe]=s.useState(null),[H,te]=s.useState({title:"",description:"",keywords:"",cluster_id:null,content_structure:"blog_post",content_type:"blog_post",status:"queued",word_count:0}),c=Oe(),[ce,p]=s.useState([]),P=s.useRef(null),J=s.useRef(-1),W=s.useRef(!1);s.useEffect(()=>{(async()=>{try{const a=await Ie({ordering:"name"});L(a.results||[])}catch(a){console.error("Error fetching clusters:",a)}})()},[]);const g=s.useCallback(async()=>{m(!0),u(!1);try{const e=B?`${f==="desc"?"-":""}${B}`:"-created_at",a={...x&&{search:x},...M&&{status:M},...y&&{cluster_id:y},...O&&{content_structure:O},...S&&{content_type:S},page:N,page_size:D,ordering:e},r=await be(a);E(r.results||[]),Z(r.count||0),G(Math.ceil((r.count||0)/D)),setTimeout(()=>{u(!0),m(!1)},100)}catch(e){console.error("Error loading tasks:",e),o.error(`Failed to load tasks: ${e.message}`),u(!0),m(!1)}},[N,M,y,O,S,B,f,x,j,D]);s.useEffect(()=>{g()},[g]),s.useEffect(()=>{const e=()=>{g()},a=()=>{g()};return window.addEventListener("siteChanged",e),window.addEventListener("sectorChanged",a),()=>{window.removeEventListener("siteChanged",e),window.removeEventListener("sectorChanged",a)}},[g]),s.useEffect(()=>{v(1)},[D]),s.useEffect(()=>{const e=setTimeout(()=>{N===1?g():v(1)},500);return()=>clearTimeout(e)},[x,N,g]);const ge=(e,a)=>{K(e||"created_at"),ee(a),v(1)},me=s.useCallback(async(e,a)=>{try{const r=e.map(i=>parseInt(i));await Se(r,a),await g()}catch(r){throw r}},[g]),pe=s.useCallback(async e=>{try{if(!e||e.length===0)throw new Error("No records selected for export");o.info("Export functionality coming soon")}catch(a){throw a}},[]),xe=s.useCallback(async(e,a)=>{if(e==="generate_content"){if(!a.title){o.error("Task must have a title to generate content");return}const r={ids:[a.id],task_title:a.title,task_id:a.id};p(i=>[...i,{timestamp:new Date().toISOString(),type:"request",action:"generate_content (Row Action)",data:r}]);try{const i=await _e([a.id]);i.success?i.task_id?(p(d=>[...d,{timestamp:new Date().toISOString(),type:"success",action:"generate_content (Row Action)",data:{task_id:i.task_id,message:i.message}}]),c.openModal(i.task_id,"Generating Content","ai-generate-content-03"),o.success("Content generation started")):(p(d=>[...d,{timestamp:new Date().toISOString(),type:"success",action:"generate_content (Row Action)",data:{tasks_updated:i.tasks_updated||0,message:i.message}}]),o.success(`Content generated successfully: ${i.tasks_updated||0} article generated`),await g()):(p(d=>[...d,{timestamp:new Date().toISOString(),type:"error",action:"generate_content (Row Action)",data:{error:i.error||"Failed to generate content"}}]),o.error(i.error||"Failed to generate content"))}catch(i){p(d=>[...d,{timestamp:new Date().toISOString(),type:"error",action:"generate_content (Row Action)",data:{error:i.message||"Unknown error occurred"}}]),o.error(`Failed to generate content: ${i.message}`)}}},[o,g,c]),fe=s.useCallback(async(e,a)=>{if(e==="generate_images"){if(a.length===0){o.error("Please select at least one task to generate images");return}if(a.length>10){o.error("Maximum 10 tasks allowed for image generation");return}const r=a.map(l=>parseInt(l)),i=C.filter(l=>r.includes(l.id)),d={ids:r,task_count:r.length,task_titles:i.map(l=>l.title)};p(l=>[...l,{timestamp:new Date().toISOString(),type:"request",action:"generate_images (Bulk Action)",data:d}]);try{const l=await we(r);l.success?l.task_id?(p(h=>[...h,{timestamp:new Date().toISOString(),type:"success",action:"generate_images (Bulk Action)",data:{task_id:l.task_id,message:l.message,task_count:r.length}}]),c.openModal(l.task_id,"Generating Images"),o.success("Image generation started")):(p(h=>[...h,{timestamp:new Date().toISOString(),type:"success",action:"generate_images (Bulk Action)",data:{images_created:l.images_created||0,message:l.message,task_count:r.length}}]),o.success(`Image generation complete: ${l.images_created||0} images generated`),await g()):(p(h=>[...h,{timestamp:new Date().toISOString(),type:"error",action:"generate_images (Bulk Action)",data:{error:l.error||"Failed to generate images",task_count:r.length}}]),o.error(l.error||"Failed to generate images"))}catch(l){p(h=>[...h,{timestamp:new Date().toISOString(),type:"error",action:"generate_images (Bulk Action)",data:{error:l.message||"Unknown error occurred",task_count:r.length}}]),o.error(`Failed to generate images: ${l.message}`)}}else o.info(`Bulk action "${e}" for ${a.length} items`)},[o,g,c,C]);s.useEffect(()=>{var l;if(!c.taskId||!c.isOpen)return;const e=c.progress,a=((l=e.details)==null?void 0:l.phase)||"",r=e.percentage,i=e.message,d=e.status;if(a&&a!==P.current){const h=d==="error"?"error":d==="completed"?"success":"step";p(Y=>[...Y,{timestamp:new Date().toISOString(),type:h,action:c.title||"AI Function",stepName:a,percentage:r,data:{step:a,message:i,percentage:r,status:d,details:e.details}}]),P.current=a,J.current=r}else if(a&&Math.abs(r-J.current)>=10){const h=d==="error"?"error":d==="completed"?"success":"step";p(Y=>[...Y,{timestamp:new Date().toISOString(),type:h,action:c.title||"AI Function",stepName:a,percentage:r,data:{step:a,message:i,percentage:r,status:d,details:e.details}}]),J.current=r}else if((d==="error"||d==="completed")&&(a!==P.current||d==="error"&&P.current!=="error"||d==="completed"&&P.current!=="completed")){const h=d==="error"?"error":"success";p(Y=>[...Y,{timestamp:new Date().toISOString(),type:h,action:c.title||"AI Function",stepName:a||"Final",percentage:r,data:{step:a||"Final",message:i,percentage:r,status:d,details:e.details}}]),P.current=a||d}},[c.progress,c.taskId,c.isOpen,c.title]),s.useEffect(()=>{c.isOpen||(P.current=null,J.current=-1),W.current=!1},[c.isOpen,c.taskId]);const w=s.useMemo(()=>ze({clusters:b,activeSector:j,formData:H,setFormData:te,searchTerm:x,setSearchTerm:$,statusFilter:M,setStatusFilter:R,clusterFilter:y,setClusterFilter:T,structureFilter:O,setStructureFilter:z,typeFilter:S,setTypeFilter:q,setCurrentPage:v}),[b,j,H,x,M,y,O,S]),he=s.useMemo(()=>w!=null&&w.headerMetrics?w.headerMetrics.map(e=>({label:e.label,value:e.calculate({tasks:C,totalCount:_}),accentColor:e.accentColor})):[],[w==null?void 0:w.headerMetrics,C,_]),se=s.useCallback(()=>{te({title:"",description:"",keywords:"",cluster_id:null,content_structure:"blog_post",content_type:"blog_post",status:"queued",word_count:0}),V(!1),oe(null)},[]),ye=async()=>{try{U&&ne?(await Te(ne.id,H),o.success("Task updated successfully")):(await Ne(H),o.success("Task created successfully")),k(!1),se(),g()}catch(e){o.error(`Failed to save: ${e.message}`)}};return t.jsxs(t.Fragment,{children:[t.jsx(de,{title:"Content Tasks",titleIcon:t.jsx(Be,{className:"text-brand-500 size-5"}),subtitle:"Manage content generation queue and tasks",columns:w.columns,data:C,loading:I,showContent:n,filters:w.filters,filterValues:{search:x,status:M,cluster_id:y,content_structure:O,content_type:S},onFilterChange:(e,a)=>{const r=a==null?"":String(a);e==="search"?$(r):e==="status"?R(r):e==="cluster_id"?T(r):e==="content_structure"?z(r):e==="content_type"&&q(r),v(1)},onEdit:e=>{oe(e),te({title:e.title||"",description:e.description||"",keywords:e.keywords||"",cluster_id:e.cluster_id||null,content_structure:e.content_structure||"blog_post",content_type:e.content_type||"blog_post",status:e.status||"queued",word_count:e.word_count||0}),V(!0),k(!0)},onCreate:()=>{se(),k(!0)},createLabel:"Add Task",onCreateIcon:t.jsx(Ae,{}),onDelete:async e=>{await Ce(e),g()},onBulkDelete:async e=>{const a=await je(e);return g(),a},onBulkExport:pe,onBulkUpdateStatus:me,onBulkAction:fe,onRowAction:xe,getItemDisplayName:e=>e.title,onExport:async()=>{o.info("Export functionality coming soon")},onExportIcon:t.jsx(ue,{}),selectionLabel:"task",pagination:{currentPage:N,totalPages:X,totalCount:_,onPageChange:v},selection:{selectedIds:A,onSelectionChange:Q},sorting:{sortBy:B,sortDirection:f,onSort:ge},headerMetrics:he,onFilterReset:()=>{$(""),R(""),T(""),z(""),q(""),v(1)}}),t.jsx(Pe,{isOpen:c.isOpen,title:c.title,percentage:c.progress.percentage,status:c.progress.status,message:c.progress.message,details:c.progress.details,taskId:c.taskId||void 0,functionId:c.functionId,onClose:()=>{const e=c.progress.status==="completed";c.closeModal(),e&&!W.current&&(W.current=!0,g(),setTimeout(()=>{W.current=!1},1e3))}}),ce.length>0&&t.jsxs("div",{className:"mt-6 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4",children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsx("h3",{className:"text-sm font-semibold text-gray-900 dark:text-gray-100",children:"AI Function Logs"}),t.jsx("button",{onClick:()=>p([]),className:"text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",children:"Clear Logs"})]}),t.jsx("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:ce.slice().reverse().map((e,a)=>t.jsxs("div",{className:`p-3 rounded border text-xs font-mono ${e.type==="request"?"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800":e.type==="success"?"bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800":e.type==="error"?"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800":"bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800"}`,children:[t.jsxs("div",{className:"flex items-center justify-between mb-1",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsxs("span",{className:`font-semibold ${e.type==="request"?"text-blue-700 dark:text-blue-300":e.type==="success"?"text-green-700 dark:text-green-300":e.type==="error"?"text-red-700 dark:text-red-300":"text-purple-700 dark:text-purple-300"}`,children:["[",e.type.toUpperCase(),"]"]}),t.jsx("span",{className:"text-gray-700 dark:text-gray-300",children:e.action}),e.stepName&&t.jsx("span",{className:"text-xs px-2 py-0.5 rounded bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400",children:e.stepName}),e.percentage!==void 0&&t.jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:[e.percentage,"%"]})]}),t.jsx("span",{className:"text-gray-500 dark:text-gray-400",children:new Date(e.timestamp).toLocaleTimeString()})]}),t.jsx("pre",{className:"text-xs text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words",children:JSON.stringify(e.data,null,2)})]},a))})]}),t.jsx($e,{isOpen:F,onClose:()=>{k(!1),se()},onSubmit:ye,title:U?"Edit Task":"Add Task",submitLabel:U?"Update":"Create",fields:w.formFields(b)})]})}const at=Object.freeze(Object.defineProperty({__proto__:null,default:re},Symbol.toStringTag,{value:"Module"}));function Ge(){const o=ae(),[j,D]=s.useState([]),[C,E]=s.useState(!0),[b,L]=s.useState(null);s.useEffect(()=>{I()},[]);const I=async()=>{try{E(!0);const m=await ve();D(m.results||[])}catch(m){o.error(`Failed to load content: ${m.message}`)}finally{E(!1)}};return t.jsxs("div",{className:"p-6",children:[t.jsx(ie,{title:"Content"}),t.jsxs("div",{className:"mb-6",children:[t.jsx("h1",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:"Content"}),t.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-1",children:"View all generated content"})]}),C?t.jsx("div",{className:"flex items-center justify-center h-64",children:t.jsx("div",{className:"text-gray-500",children:"Loading..."})}):t.jsx("div",{className:"space-y-4",children:j.map(m=>t.jsxs(De,{className:"p-6",children:[t.jsxs("div",{className:"flex justify-between items-start mb-4",children:[t.jsxs("div",{children:[t.jsxs("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:["Task #",m.task]}),t.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:["Generated: ",new Date(m.generated_at).toLocaleString()]})]}),t.jsxs("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:[m.word_count," words"]})]}),t.jsx("div",{className:"prose dark:prose-invert max-w-none",dangerouslySetInnerHTML:{__html:m.html_content}})]},m.id))})]})}const rt=Object.freeze(Object.defineProperty({__proto__:null,default:Ge},Symbol.toStringTag,{value:"Module"}));function Ue(){return t.jsx(re,{})}const nt=Object.freeze(Object.defineProperty({__proto__:null,default:Ue},Symbol.toStringTag,{value:"Module"}));function Ve(){const o=ae(),[j,D]=s.useState([]),[C,E]=s.useState(!0),[b,L]=s.useState(""),[I,m]=s.useState(""),[x,$]=s.useState(""),[M,R]=s.useState([]),[y,T]=s.useState(1),[O,z]=s.useState(1),[S,q]=s.useState(0),[A,Q]=s.useState("created_at"),[N,v]=s.useState("desc"),[X,G]=s.useState(!1),_=s.useCallback(async()=>{E(!0),G(!1);try{const n=A?`${N==="desc"?"-":""}${A}`:"-created_at",u={...I&&{image_type:I},...x&&{status:x},page:y,ordering:n};let k=(await Fe(u)).results||[];b&&(k=k.filter(U=>{var V;return(V=U.task_title)==null?void 0:V.toLowerCase().includes(b.toLowerCase())})),D(k),q(k.length),z(Math.ceil(k.length/10)),setTimeout(()=>{G(!0),E(!1)},100)}catch(n){console.error("Error loading images:",n),o.error(`Failed to load images: ${n.message}`),G(!0),E(!1)}},[y,I,x,A,N,b]);s.useEffect(()=>{_()},[_]),s.useEffect(()=>{const n=setTimeout(()=>{y===1?_():T(1)},500);return()=>clearTimeout(n)},[b,y,_]);const Z=(n,u)=>{Q(n||"created_at"),v(u),T(1)},B=s.useCallback(async n=>{try{if(!n||n.length===0)throw new Error("No records selected for export");o.info("Export functionality coming soon")}catch(u){throw u}},[]),K=s.useCallback(async(n,u)=>{if(n==="generate_images")try{const F=u.map(k=>parseInt(k));o.info(`Generate images for ${u.length} items`)}catch(F){o.error(`Failed to generate images: ${F.message}`)}else o.info(`Bulk action "${n}" for ${u.length} items`)},[]),f=s.useMemo(()=>Re(),[b,I,x]),ee=s.useMemo(()=>f!=null&&f.headerMetrics?f.headerMetrics.map(n=>({label:n.label,value:n.calculate({images:j,totalCount:S}),accentColor:n.accentColor})):[],[f==null?void 0:f.headerMetrics,j,S]);return t.jsx(de,{title:"Task Images",titleIcon:t.jsx(Le,{className:"text-purple-500 size-5"}),subtitle:"Manage images for content tasks",columns:f.columns,data:j,loading:C,showContent:X,filters:f.filters,filterValues:{search:b,image_type:I,status:x},onFilterChange:(n,u)=>{const F=u==null?"":String(u);n==="search"?L(F):n==="image_type"?m(F):n==="status"&&$(F),T(1)},onDelete:async n=>{await le(n),_()},onBulkDelete:async n=>{for(const u of n)await le(u);return _(),{deleted_count:n.length}},onBulkExport:B,onBulkAction:K,getItemDisplayName:n=>n.task_title||`Image ${n.id}`,onExport:async()=>{o.info("Export functionality coming soon")},onExportIcon:t.jsx(ue,{}),selectionLabel:"image",pagination:{currentPage:y,totalPages:O,totalCount:S,onPageChange:T},selection:{selectedIds:M,onSelectionChange:R},sorting:{sortBy:A,sortDirection:N,onSort:Z},headerMetrics:ee,onFilterReset:()=>{L(""),m(""),$(""),T(1)}})}const ot=Object.freeze(Object.defineProperty({__proto__:null,default:Ve},Symbol.toStringTag,{value:"Module"}));function We(){return t.jsx(re,{})}const ct=Object.freeze(Object.defineProperty({__proto__:null,default:We},Symbol.toStringTag,{value:"Module"}));export{rt as C,st as D,ot as I,ct as P,at as T,nt as a};