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

2 lines
11 KiB
JavaScript

import{j as c,r as s}from"./chunk-UIGDSWPH-BhuNDbxn.js";import{u as ue,T as ce,S as ie}from"./TablePageTemplate-BEWe6AkV.js";import{u as de,d as pe,j as ge,E as me,F as R,g as _e,G as be,H as ye,i as fe,J as we,K as he}from"./main-af3pcbZa.js";import{F as Ce}from"./FormModal-DkhE3zPR.js";import{t as Se,s as ke,a as ve,f as U,b as xe,u as Fe,P as Ie}from"./date-Cc7ORwbK.js";import{S as De}from"./plus-2WF6_FMG.js";import{B as k}from"./Badge-DM3morB7.js";import{P as Ee}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 Pe=t=>{const w=!t.activeSector;return{columns:[{...Se,key:"idea_title",label:"Title",sortable:!0,sortField:"idea_title",toggleable:!0,toggleContentKey:"description",toggleContentLabel:"Content Outline",render:a=>c.jsx("span",{className:"text-gray-800 dark:text-white font-medium",children:a})},...w?[{...ke,render:(a,n)=>c.jsx(k,{color:"info",size:"sm",variant:"light",children:n.sector_name||"-"})}]:[],{key:"content_structure",label:"Structure",sortable:!0,sortField:"content_structure",width:"150px",render:a=>c.jsx(k,{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=>c.jsx(k,{color:"info",size:"sm",variant:"light",children:(a==null?void 0:a.replace("_"," "))||"-"})},{key:"target_keywords",label:"Target Keywords",sortable:!1,width:"250px",render:a=>c.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400 truncate block max-w-[250px]",children:a||"-"})},{key:"keyword_cluster_name",label:"Cluster",sortable:!0,sortField:"keyword_cluster_id",width:"200px",render:(a,n)=>n.keyword_cluster_name||"-"},{...ve,sortable:!0,sortField:"status",render:a=>{const n={new:"warning",scheduled:"info",published:"success"};return c.jsx(k,{color:n[a]||"warning",size:"sm",children:a})}},{key:"estimated_word_count",label:"Words",sortable:!0,sortField:"estimated_word_count",width:"100px",render:a=>a.toLocaleString()},{...xe,sortable:!0,sortField:"created_at",render:a=>U(a)},{key:"updated_at",label:"Updated",sortable:!0,sortField:"updated_at",defaultVisible:!1,render:a=>U(a)}],filters:[{key:"search",label:"Search",type:"text",placeholder:"Search ideas..."},{key:"status",label:"Status",type:"select",options:[{value:"",label:"All Status"},{value:"new",label:"New"},{value:"scheduled",label:"Scheduled"},{value:"published",label:"Published"}]},{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:"keyword_cluster_id",label:"Cluster",type:"select",options:[{value:"",label:"All Clusters"},...t.clusters.map(a=>({value:a.id.toString(),label:a.name}))],dynamicOptions:"clusters"}],formFields:a=>{var n;return[{key:"idea_title",label:"Title",type:"text",placeholder:"Enter idea title",required:!0,value:t.formData.idea_title||"",onChange:r=>t.setFormData({...t.formData,idea_title:r})},{key:"description",label:"Description",type:"textarea",placeholder:"Enter description",value:t.formData.description||"",onChange:r=>t.setFormData({...t.formData,description:r})},{key:"content_structure",label:"Content Structure",type:"select",value:t.formData.content_structure||"blog_post",onChange:r=>t.setFormData({...t.formData,content_structure:r}),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:t.formData.content_type||"blog_post",onChange:r=>t.setFormData({...t.formData,content_type:r}),options:[{value:"blog_post",label:"Blog Post"},{value:"article",label:"Article"},{value:"guide",label:"Guide"},{value:"tutorial",label:"Tutorial"}]},{key:"target_keywords",label:"Target Keywords",type:"text",placeholder:"Enter keywords (comma-separated)",value:t.formData.target_keywords||"",onChange:r=>t.setFormData({...t.formData,target_keywords:r})},{key:"keyword_cluster_id",label:"Cluster",type:"select",value:((n=t.formData.keyword_cluster_id)==null?void 0:n.toString())||"",onChange:r=>t.setFormData({...t.formData,keyword_cluster_id:r?parseInt(r):null}),options:[{value:"",label:"No Cluster"},...a.map(r=>({value:r.id.toString(),label:r.name}))]},{key:"estimated_word_count",label:"Estimated Word Count",type:"number",value:t.formData.estimated_word_count||1e3,onChange:r=>t.setFormData({...t.formData,estimated_word_count:r?parseInt(r):1e3})},{key:"status",label:"Status",type:"select",value:t.formData.status||"new",onChange:r=>t.setFormData({...t.formData,status:r}),options:[{value:"new",label:"New"},{value:"scheduled",label:"Scheduled"},{value:"published",label:"Published"}]}]},headerMetrics:[{label:"Total Ideas",value:0,accentColor:"blue",calculate:a=>a.totalCount||0},{label:"New",value:0,accentColor:"amber",calculate:a=>a.ideas.filter(n=>n.status==="new").length},{label:"Scheduled",value:0,accentColor:"blue",calculate:a=>a.ideas.filter(n=>n.status==="scheduled").length},{label:"Published",value:0,accentColor:"green",calculate:a=>a.ideas.filter(n=>n.status==="published").length}]}};function Ge(){const t=de(),{activeSector:w}=pe(),{pageSize:a}=ue(),[n,r]=s.useState([]),[v,H]=s.useState([]),[K,x]=s.useState(!0),[g,F]=s.useState(""),[m,I]=s.useState(""),[_,D]=s.useState(""),[b,E]=s.useState(""),[y,P]=s.useState(""),[G,N]=s.useState([]),[f,p]=s.useState(1),[Q,V]=s.useState(1),[T,W]=s.useState(0),[h,J]=s.useState("created_at"),[j,X]=s.useState("desc"),[Y,M]=s.useState(!1),[Z,C]=s.useState(!1),[B,O]=s.useState(!1),[q,z]=s.useState(null),[S,L]=s.useState({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),i=Fe();s.useEffect(()=>{(async()=>{try{const o=await fe({ordering:"name"});H(o.results||[])}catch(o){console.error("Error fetching clusters:",o)}})()},[]);const u=s.useCallback(async()=>{x(!0),M(!1);try{const e=h?`${j==="desc"?"-":""}${h}`:"-created_at",o={...g&&{search:g},...m&&{status:m},..._&&{keyword_cluster_id:_},...b&&{content_structure:b},...y&&{content_type:y},page:f,page_size:a,ordering:e},l=await ge(o);r(l.results||[]),W(l.count||0),V(Math.ceil((l.count||0)/a)),setTimeout(()=>{M(!0),x(!1)},100)}catch(e){console.error("Error loading ideas:",e),t.error(`Failed to load ideas: ${e.message}`),M(!0),x(!1)}},[f,m,_,b,y,h,j,g,w,a]);s.useEffect(()=>{u()},[u]),s.useEffect(()=>{const e=()=>{u()},o=()=>{u()};return window.addEventListener("siteChanged",e),window.addEventListener("sectorChanged",o),()=>{window.removeEventListener("siteChanged",e),window.removeEventListener("sectorChanged",o)}},[u]),s.useEffect(()=>{p(1)},[a]),s.useEffect(()=>{const e=setTimeout(()=>{f===1?u():p(1)},500);return()=>clearTimeout(e)},[g,f,u]);const ee=(e,o)=>{J(e||"created_at"),X(o),p(1)},te=s.useCallback(async(e,o)=>{try{const l=e.map($=>parseInt($));await me(l,o),await u()}catch(l){throw l}},[u]),ae=s.useCallback(async e=>{try{if(!e||e.length===0)throw new Error("No records selected for export");t.info("Export functionality coming soon")}catch(o){throw o}},[]),se=s.useCallback(async(e,o)=>{if(e==="queue_to_writer"){if(o.status!=="new"){t.error(`Only ideas with status "new" can be queued. Current status: ${o.status}`);return}try{const l=await R([o.id]);t.success(`Queue complete: ${l.created_count||0} task created`),await u()}catch(l){t.error(`Failed to queue idea: ${l.message}`)}}},[t,u]),oe=s.useCallback(async(e,o)=>{if(e==="queue_to_writer"){if(o.length===0){t.error("Please select at least one idea to queue");return}try{const l=o.map(ne=>parseInt(ne)),$=await R(l);t.success(`Queue complete: ${$.created_count||0} tasks created from ${o.length} ideas`),await u()}catch(l){t.error(`Failed to queue ideas: ${l.message}`)}}else t.info(`Bulk action "${e}" for ${o.length} items`)},[t,u]),d=s.useMemo(()=>Pe({clusters:v,activeSector:w,formData:S,setFormData:L,searchTerm:g,setSearchTerm:F,statusFilter:m,setStatusFilter:I,clusterFilter:_,setClusterFilter:D,structureFilter:b,setStructureFilter:E,typeFilter:y,setTypeFilter:P,setCurrentPage:p}),[v,w,S,g,m,_,b,y]),re=s.useMemo(()=>d!=null&&d.headerMetrics?d.headerMetrics.map(e=>({label:e.label,value:e.calculate({ideas:n,totalCount:T}),accentColor:e.accentColor})):[],[d==null?void 0:d.headerMetrics,n,T]),A=s.useCallback(()=>{L({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),O(!1),z(null)},[]),le=async()=>{try{B&&q?(await we(q.id,S),t.success("Idea updated successfully")):(await he(S),t.success("Idea created successfully")),C(!1),A(),u()}catch(e){t.error(`Failed to save: ${e.message}`)}};return c.jsxs(c.Fragment,{children:[c.jsx(Ee,{title:"Content Ideas",badge:{icon:c.jsx(_e,{}),color:"orange"}}),c.jsx(ce,{columns:d.columns,data:n,loading:K,showContent:Y,filters:d.filters,filterValues:{search:g,status:m,keyword_cluster_id:_,content_structure:b,content_type:y},onFilterChange:(e,o)=>{const l=o==null?"":String(o);e==="search"?F(l):e==="status"?I(l):e==="keyword_cluster_id"?D(l):e==="content_structure"?E(l):e==="content_type"&&P(l),p(1)},onEdit:e=>{z(e),L({idea_title:e.idea_title||"",description:e.description||"",content_structure:e.content_structure||"blog_post",content_type:e.content_type||"blog_post",target_keywords:e.target_keywords||"",keyword_cluster_id:e.keyword_cluster_id||null,status:e.status||"new",estimated_word_count:e.estimated_word_count||1e3}),O(!0),C(!0)},onCreate:()=>{A(),C(!0)},createLabel:"Add Idea",onCreateIcon:c.jsx(De,{}),onDelete:async e=>{await ye(e),u()},onBulkDelete:async e=>{const o=await be(e);return N([]),f>1&&n.length<=e.length&&p(1),await u(),o},onBulkExport:ae,onBulkUpdateStatus:te,onBulkAction:oe,onRowAction:se,getItemDisplayName:e=>e.idea_title,onExport:async()=>{t.info("Export functionality coming soon")},onExportIcon:c.jsx(ie,{}),selectionLabel:"idea",pagination:{currentPage:f,totalPages:Q,totalCount:T,onPageChange:p},selection:{selectedIds:G,onSelectionChange:N},sorting:{sortBy:h,sortDirection:j,onSort:ee},headerMetrics:re,onFilterReset:()=>{F(""),I(""),D(""),E(""),P(""),p(1)}}),c.jsx(Ie,{isOpen:i.isOpen,title:i.title,percentage:i.progress.percentage,status:i.progress.status,message:i.progress.message,details:i.progress.details,taskId:i.taskId||void 0,functionId:i.functionId,stepLogs:i.stepLogs,onClose:()=>{const e=i.progress.status==="completed";i.closeModal(),e&&u()}}),c.jsx(Ce,{isOpen:Z,onClose:()=>{C(!1),A()},onSubmit:le,title:B?"Edit Idea":"Add Idea",submitLabel:B?"Update":"Create",fields:d.formFields(v)})]})}export{Ge as default};