Files
igny8/frontend/dist/assets/js/Tasks-Bv8qVyPX.js
IGNY8 VPS (Salman) 3c100be1cf more
2025-11-13 14:12:36 +00:00

2 lines
17 KiB
JavaScript

import{j as n,r}from"./chunk-UIGDSWPH-BhuNDbxn.js";import{u as ye,T as fe,S as ke}from"./TablePageTemplate-BEWe6AkV.js";import{u as xe,d as _e,k as he,X as Se,Y as we,Z as Ce,_ as ve,$ as De,a0 as Te,i as Fe,a1 as Ie,a2 as je}from"./main-af3pcbZa.js";import{F as Ee}from"./FormModal-DkhE3zPR.js";import{t as Ae,s as Ne,a as Pe,w as Oe,f as Z,b as Me,u as Le,P as Be}from"./date-Cc7ORwbK.js";import{u as Re}from"./useResourceDebug-Dza3x9eP.js";import{S as qe}from"./plus-2WF6_FMG.js";import{B as A}from"./Badge-DM3morB7.js";import{P as $e}from"./PageHeader-iXTYKDGo.js";import"./SelectDropdown-C8sZwHi_.js";import"./AlertModal-BhtTtzZV.js";import"./index-ju2wdkG8.js";import"./check-circle--AtVWUy0.js";import"./arrow-right-DC7G5FiV.js";import"./pencil-CuC2vg9I.js";import"./angle-left-CYBnq6Pg.js";const Ue=s=>{const C=!s.activeSector;return{columns:[{...Ae,sortable:!0,sortField:"title",toggleable:!0,toggleContentKey:"description",toggleContentLabel:"Idea & Content Outline"},...C?[{...Ne,render:(a,u)=>n.jsx(A,{color:"info",size:"sm",variant:"light",children:u.sector_name||"-"})}]:[],{key:"cluster_name",label:"Cluster",sortable:!0,sortField:"cluster_id",width:"200px",render:(a,u)=>u.cluster_name||"-"},{key:"content_structure",label:"Structure",sortable:!0,sortField:"content_structure",width:"150px",render:a=>n.jsx(A,{color:"info",size:"sm",variant:"light",children:(a==null?void 0:a.replace("_"," "))||"-"})},{key:"content_type",label:"Type",sortable:!0,sortField:"content_type",width:"120px",render:a=>n.jsx(A,{color:"info",size:"sm",variant:"light",children:(a==null?void 0:a.replace("_"," "))||"-"})},{...Pe,sortable:!0,sortField:"status",render:a=>{const u={queued:"warning",completed:"success"},c=a?a.replace("_"," "):"",v=c?c.charAt(0).toUpperCase()+c.slice(1):"";return n.jsx(A,{color:u[a]||"warning",size:"sm",children:v})}},{...Oe,sortable:!0,sortField:"word_count",render:a=>a.toLocaleString()},{...Me,sortable:!0,sortField:"created_at",render:a=>Z(a)},{key:"idea_title",label:"Idea",sortable:!0,sortField:"idea_id",defaultVisible:!1,width:"200px",render:(a,u)=>n.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400 truncate block max-w-[200px]",children:u.idea_title||"-"})},{key:"keywords",label:"Keywords",sortable:!1,defaultVisible:!1,width:"200px",render:a=>n.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400 truncate block max-w-[200px]",children:a||"-"})},{key:"meta_title",label:"Meta Title",sortable:!1,defaultVisible:!1,width:"200px",render:a=>n.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400 truncate block max-w-[200px]",children:a||"-"})},{key:"meta_description",label:"Meta Description",sortable:!1,defaultVisible:!1,width:"250px",render:a=>n.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400 truncate block max-w-[250px]",children:a||"-"})},{key:"post_url",label:"Post URL",sortable:!1,defaultVisible:!1,width:"200px",render:a=>a?n.jsx("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-brand-600 hover:text-brand-700 dark:text-brand-400 dark:hover:text-brand-300 truncate block max-w-[200px]",children:a}):n.jsx("span",{className:"text-sm text-gray-400 dark:text-gray-500",children:"-"})},{key:"updated_at",label:"Updated",sortable:!0,sortField:"updated_at",defaultVisible:!1,render:a=>Z(a)}],filters:[{key:"search",label:"Search",type:"text",placeholder:"Search tasks..."},{key:"status",label:"Status",type:"select",options:[{value:"",label:"All Status"},{value:"queued",label:"Queued"},{value:"completed",label:"Completed"}]},{key:"content_structure",label:"Structure",type:"select",options:[{value:"",label:"All Structures"},{value:"cluster_hub",label:"Cluster Hub"},{value:"landing_page",label:"Landing Page"},{value:"pillar_page",label:"Pillar Page"},{value:"supporting_page",label:"Supporting Page"}]},{key:"content_type",label:"Type",type:"select",options:[{value:"",label:"All Types"},{value:"blog_post",label:"Blog Post"},{value:"article",label:"Article"},{value:"guide",label:"Guide"},{value:"tutorial",label:"Tutorial"}]},{key:"cluster_id",label:"Cluster",type:"select",options:[{value:"",label:"All Clusters"},...s.clusters.map(a=>({value:a.id.toString(),label:a.name}))],dynamicOptions:"clusters"}],formFields:a=>{var u;return[{key:"title",label:"Title",type:"text",placeholder:"Enter task title",required:!0,value:s.formData.title||"",onChange:c=>s.setFormData({...s.formData,title:c})},{key:"description",label:"Description",type:"textarea",placeholder:"Enter description",value:s.formData.description||"",onChange:c=>s.setFormData({...s.formData,description:c})},{key:"keywords",label:"Keywords",type:"text",placeholder:"Enter keywords (comma-separated)",value:s.formData.keywords||"",onChange:c=>s.setFormData({...s.formData,keywords:c})},{key:"cluster_id",label:"Cluster",type:"select",value:((u=s.formData.cluster_id)==null?void 0:u.toString())||"",onChange:c=>s.setFormData({...s.formData,cluster_id:c?parseInt(c):null}),options:[{value:"",label:"No Cluster"},...a.map(c=>({value:c.id.toString(),label:c.name}))]},{key:"content_structure",label:"Content Structure",type:"select",value:s.formData.content_structure||"blog_post",onChange:c=>s.setFormData({...s.formData,content_structure:c}),options:[{value:"cluster_hub",label:"Cluster Hub"},{value:"landing_page",label:"Landing Page"},{value:"pillar_page",label:"Pillar Page"},{value:"supporting_page",label:"Supporting Page"}]},{key:"content_type",label:"Content Type",type:"select",value:s.formData.content_type||"blog_post",onChange:c=>s.setFormData({...s.formData,content_type:c}),options:[{value:"blog_post",label:"Blog Post"},{value:"article",label:"Article"},{value:"guide",label:"Guide"},{value:"tutorial",label:"Tutorial"}]},{key:"status",label:"Status",type:"select",value:s.formData.status||"queued",onChange:c=>s.setFormData({...s.formData,status:c}),options:[{value:"queued",label:"Queued"},{value:"completed",label:"Completed"}]}]},headerMetrics:[{label:"Total Tasks",value:0,accentColor:"blue",calculate:a=>a.totalCount||0},{label:"Queued",value:0,accentColor:"amber",calculate:a=>a.tasks.filter(u=>u.status==="queued").length},{label:"Completed",value:0,accentColor:"green",calculate:a=>a.tasks.filter(u=>u.status==="completed").length}]}};function ot(){const s=xe(),{activeSector:C}=_e(),{pageSize:a}=ye(),[u,c]=r.useState([]),[v,W]=r.useState([]),[ee,N]=r.useState(!0),[f,P]=r.useState(""),[x,O]=r.useState(""),[_,M]=r.useState(""),[h,L]=r.useState(""),[S,B]=r.useState(""),[te,H]=r.useState([]),[w,y]=r.useState(1),[ae,se]=r.useState(1),[R,re]=r.useState(0),[F,oe]=r.useState("created_at"),[q,ne]=r.useState("desc"),[le,$]=r.useState(!1),[ce,I]=r.useState(!1),[U,K]=r.useState(!1),[Q,J]=r.useState(null),[j,V]=r.useState({title:"",description:"",keywords:"",cluster_id:null,content_structure:"blog_post",content_type:"blog_post",status:"queued",word_count:0}),l=Le(),[X,Y]=r.useState([]),z=Re(),k=r.useRef(null),E=r.useRef(-1),D=r.useRef(!1),m=r.useCallback(e=>{z&&Y(t=>[...t,e])},[z]);r.useEffect(()=>{(async()=>{try{const t=await Fe({ordering:"name"});W(t.results||[])}catch(t){console.error("Error fetching clusters:",t)}})()},[]);const p=r.useCallback(async()=>{N(!0),$(!1);try{const e=F?`${q==="desc"?"-":""}${F}`:"-created_at",t={...f&&{search:f},...x&&{status:x},..._&&{cluster_id:_},...h&&{content_structure:h},...S&&{content_type:S},page:w,page_size:a,ordering:e},o=await he(t);c(o.results||[]),re(o.count||0),se(Math.ceil((o.count||0)/a)),setTimeout(()=>{$(!0),N(!1)},100)}catch(e){console.error("Error loading tasks:",e),s.error(`Failed to load tasks: ${e.message}`),$(!0),N(!1)}},[w,x,_,h,S,F,q,f,C,a]);r.useEffect(()=>{p()},[p]),r.useEffect(()=>{const e=()=>{p()},t=()=>{p()};return window.addEventListener("siteChanged",e),window.addEventListener("sectorChanged",t),()=>{window.removeEventListener("siteChanged",e),window.removeEventListener("sectorChanged",t)}},[p]),r.useEffect(()=>{y(1)},[a]),r.useEffect(()=>{const e=setTimeout(()=>{w===1?p():y(1)},500);return()=>clearTimeout(e)},[f,w,p]);const ie=(e,t)=>{oe(e||"created_at"),ne(t),y(1)},ue=r.useCallback(async(e,t)=>{try{const o=e.map(d=>parseInt(d));await Se(o,t),await p()}catch(o){throw o}},[p]),de=r.useCallback(async e=>{try{if(!e||e.length===0)throw new Error("No records selected for export");s.info("Export functionality coming soon")}catch(t){throw t}},[]),pe=r.useCallback(async(e,t)=>{if(e==="generate_content"){if(!t.title){s.error("Task must have a title to generate content");return}const o={ids:[t.id],task_title:t.title,task_id:t.id};m({timestamp:new Date().toISOString(),type:"request",action:"generate_content (Row Action)",data:o});try{const d=await we([t.id]);d.success?d.task_id?(m({timestamp:new Date().toISOString(),type:"success",action:"generate_content (Row Action)",data:{task_id:d.task_id,message:d.message}}),l.openModal(d.task_id,"Generating Content","ai-generate-content-03"),s.success("Content generation started")):(m({timestamp:new Date().toISOString(),type:"success",action:"generate_content (Row Action)",data:{tasks_updated:d.tasks_updated||0,message:d.message}}),s.success(`Content generated successfully: ${d.tasks_updated||0} article generated`),await p()):(m({timestamp:new Date().toISOString(),type:"error",action:"generate_content (Row Action)",data:{error:d.error||"Failed to generate content"}}),s.error(d.error||"Failed to generate content"))}catch(d){m({timestamp:new Date().toISOString(),type:"error",action:"generate_content (Row Action)",data:{error:d.message||"Unknown error occurred"}}),s.error(`Failed to generate content: ${d.message}`)}}},[s,p,l]),ge=r.useCallback(async(e,t)=>{if(e==="generate_images"){if(t.length===0){s.error("Please select at least one task to generate images");return}if(t.length>10){s.error("Maximum 10 tasks allowed for image generation");return}const o=t.map(i=>parseInt(i)),d=u.filter(i=>o.includes(i.id)),g={ids:o,task_count:o.length,task_titles:d.map(i=>i.title)};m({timestamp:new Date().toISOString(),type:"request",action:"generate_images (Bulk Action)",data:g});try{const i=await Ce(o);i.success?i.task_id?(m({timestamp:new Date().toISOString(),type:"success",action:"generate_images (Bulk Action)",data:{task_id:i.task_id,message:i.message,task_count:o.length}}),l.openModal(i.task_id,"Generating Images"),s.success("Image generation started")):(m({timestamp:new Date().toISOString(),type:"success",action:"generate_images (Bulk Action)",data:{images_created:i.images_created||0,message:i.message,task_count:o.length}}),s.success(`Image generation complete: ${i.images_created||0} images generated`),await p()):(m({timestamp:new Date().toISOString(),type:"error",action:"generate_images (Bulk Action)",data:{error:i.error||"Failed to generate images",task_count:o.length}}),s.error(i.error||"Failed to generate images"))}catch(i){m({timestamp:new Date().toISOString(),type:"error",action:"generate_images (Bulk Action)",data:{error:i.message||"Unknown error occurred",task_count:o.length}}),s.error(`Failed to generate images: ${i.message}`)}}else s.info(`Bulk action "${e}" for ${t.length} items`)},[s,p,l,u]);r.useEffect(()=>{var i;if(!l.taskId||!l.isOpen)return;const e=l.progress,t=((i=e.details)==null?void 0:i.phase)||"",o=e.percentage,d=e.message,g=e.status;if(t&&t!==k.current){const T=g==="error"?"error":g==="completed"?"success":"step";m({timestamp:new Date().toISOString(),type:T,action:l.title||"AI Function",stepName:t,percentage:o,data:{step:t,message:d,percentage:o,status:g,details:e.details}}),k.current=t,E.current=o}else if(t&&Math.abs(o-E.current)>=10){const T=g==="error"?"error":g==="completed"?"success":"step";m({timestamp:new Date().toISOString(),type:T,action:l.title||"AI Function",stepName:t,percentage:o,data:{step:t,message:d,percentage:o,status:g,details:e.details}}),E.current=o}else if((g==="error"||g==="completed")&&(t!==k.current||g==="error"&&k.current!=="error"||g==="completed"&&k.current!=="completed")){const T=g==="error"?"error":"success";m({timestamp:new Date().toISOString(),type:T,action:l.title||"AI Function",stepName:t||"Final",percentage:o,data:{step:t||"Final",message:d,percentage:o,status:g,details:e.details}}),k.current=t||g}},[l.progress,l.taskId,l.isOpen,l.title,m]),r.useEffect(()=>{l.isOpen||(k.current=null,E.current=-1),D.current=!1},[l.isOpen,l.taskId]);const b=r.useMemo(()=>Ue({clusters:v,activeSector:C,formData:j,setFormData:V,searchTerm:f,setSearchTerm:P,statusFilter:x,setStatusFilter:O,clusterFilter:_,setClusterFilter:M,structureFilter:h,setStructureFilter:L,typeFilter:S,setTypeFilter:B,setCurrentPage:y}),[v,C,j,f,x,_,h,S]),me=r.useMemo(()=>b!=null&&b.headerMetrics?b.headerMetrics.map(e=>({label:e.label,value:e.calculate({tasks:u,totalCount:R}),accentColor:e.accentColor})):[],[b==null?void 0:b.headerMetrics,u,R]),G=r.useCallback(()=>{V({title:"",description:"",keywords:"",cluster_id:null,content_structure:"blog_post",content_type:"blog_post",status:"queued",word_count:0}),K(!1),J(null)},[]),be=async()=>{try{U&&Q?(await Ie(Q.id,j),s.success("Task updated successfully")):(await je(j),s.success("Task created successfully")),I(!1),G(),p()}catch(e){s.error(`Failed to save: ${e.message}`)}};return n.jsxs(n.Fragment,{children:[n.jsx($e,{title:"Tasks",badge:{icon:n.jsx(ve,{}),color:"indigo"}}),n.jsx(fe,{columns:b.columns,data:u,loading:ee,showContent:le,filters:b.filters,filterValues:{search:f,status:x,cluster_id:_,content_structure:h,content_type:S},onFilterChange:(e,t)=>{const o=t==null?"":String(t);e==="search"?P(o):e==="status"?O(o):e==="cluster_id"?M(o):e==="content_structure"?L(o):e==="content_type"&&B(o),y(1)},onEdit:e=>{J(e),V({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}),K(!0),I(!0)},onCreate:()=>{G(),I(!0)},createLabel:"Add Task",onCreateIcon:n.jsx(qe,{}),onDelete:async e=>{await Te(e),p()},onBulkDelete:async e=>{const t=await De(e);return H([]),w>1&&u.length<=e.length&&y(1),await p(),t},onBulkExport:de,onBulkUpdateStatus:ue,onBulkAction:ge,onRowAction:pe,getItemDisplayName:e=>e.title,onExport:async()=>{s.info("Export functionality coming soon")},onExportIcon:n.jsx(ke,{}),selectionLabel:"task",pagination:{currentPage:w,totalPages:ae,totalCount:R,onPageChange:y},selection:{selectedIds:te,onSelectionChange:H},sorting:{sortBy:F,sortDirection:q,onSort:ie},headerMetrics:me,onFilterReset:()=>{P(""),O(""),M(""),L(""),B(""),y(1)}}),n.jsx(Be,{isOpen:l.isOpen,title:l.title,percentage:l.progress.percentage,status:l.progress.status,message:l.progress.message,details:l.progress.details,taskId:l.taskId||void 0,functionId:l.functionId,onClose:()=>{const e=l.progress.status==="completed";l.closeModal(),e&&!D.current&&(D.current=!0,p(),setTimeout(()=>{D.current=!1},1e3))}}),z&&X.length>0&&n.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:[n.jsxs("div",{className:"flex items-center justify-between mb-3",children:[n.jsx("h3",{className:"text-sm font-semibold text-gray-900 dark:text-gray-100",children:"AI Function Logs"}),n.jsx("button",{onClick:()=>Y([]),className:"text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",children:"Clear Logs"})]}),n.jsx("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:X.slice().reverse().map((e,t)=>n.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:[n.jsxs("div",{className:"flex items-center justify-between mb-1",children:[n.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[n.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(),"]"]}),n.jsx("span",{className:"text-gray-700 dark:text-gray-300",children:e.action}),e.stepName&&n.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&&n.jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:[e.percentage,"%"]})]}),n.jsx("span",{className:"text-gray-500 dark:text-gray-400",children:new Date(e.timestamp).toLocaleTimeString()})]}),n.jsx("pre",{className:"text-xs text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words",children:JSON.stringify(e.data,null,2)})]},t))})]}),n.jsx(Ee,{isOpen:ce,onClose:()=>{I(!1),G()},onSubmit:be,title:U?"Edit Task":"Add Task",submitLabel:U?"Update":"Create",fields:b.formFields(v)})]})}export{ot as default};