1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[467],{6387:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/admin/schedules",function(){return n(6008)}])},1827:function(e,t,n){"use strict";n.d(t,{Z:function(){return c}});var a=n(651),r=n(3042),s=n.n(r),l=n(20),i=n(2518),d=n.n(i);let o=[{href:"/admin/jobs",label:"Jobs"},{href:"/admin/schedules",label:"Schedules"}];function c(e){let{children:t,title:n,admin_key:r}=e,i=(0,l.useRouter)().pathname;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(d(),{children:[(0,a.jsx)("title",{children:n}),(0,a.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,a.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,a.jsx)("nav",{className:"border-b",children:(0,a.jsxs)("div",{className:"max-w-7xl mx-auto px-6 flex items-center h-12 gap-6",children:[(0,a.jsx)("span",{className:"text-sm font-semibold text-muted-foreground",children:"Admin"}),o.map(e=>(0,a.jsx)(s(),{href:"".concat(e.href,"?key=").concat(r),className:"text-sm ".concat(i===e.href?"text-foreground font-medium":"text-muted-foreground hover:text-foreground"),children:e.label},e.href))]})}),(0,a.jsx)("div",{className:"max-w-7xl mx-auto p-6",children:t})]})]})}},467:function(e,t,n){"use strict";n.d(t,{C:function(){return i}});var a=n(651);n(2379);var r=n(4990),s=n(3616);let l=(0,r.j)("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function i(e){let{className:t,variant:n,...r}=e;return(0,a.jsx)("div",{className:(0,s.cn)(l({variant:n}),t),...r})}},1186:function(e,t,n){"use strict";n.d(t,{d:function(){return d},z:function(){return o}});var a=n(651),r=n(2379),s=n(7547),l=n(4990),i=n(3616);let d=(0,l.j)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),o=r.forwardRef((e,t)=>{let{className:n,variant:r,size:l,asChild:o=!1,...c}=e,u=o?s.g7:"button";return(0,a.jsx)(u,{className:(0,i.cn)(d({variant:r,size:l,className:n})),ref:t,...c})});o.displayName="Button"},7944:function(e,t,n){"use strict";n.d(t,{$N:function(){return h},Be:function(){return p},Vq:function(){return d},cN:function(){return x},cZ:function(){return m},fK:function(){return f},hg:function(){return o}});var a=n(651),r=n(2379),s=n(2460),l=n(8580),i=n(3616);let d=s.fC,o=s.xz,c=s.h_;s.x8;let u=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)(s.aV,{ref:t,className:(0,i.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",n),...r})});u.displayName=s.aV.displayName;let m=r.forwardRef((e,t)=>{let{className:n,children:r,...d}=e;return(0,a.jsxs)(c,{children:[(0,a.jsx)(u,{}),(0,a.jsxs)(s.VY,{ref:t,className:(0,i.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rou
1nded-lg",n),...d,children:[r,(0,a.jsxs)(s.x8,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[(0,a.jsx)(l.Z,{className:"h-4 w-4"}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});m.displayName=s.VY.displayName;let f=e=>{let{className:t,...n}=e;return(0,a.jsx)("div",{className:(0,i.cn)("flex flex-col space-y-1.5 text-center sm:text-left",t),...n})};f.displayName="DialogHeader";let x=e=>{let{className:t,...n}=e;return(0,a.jsx)("div",{className:(0,i.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...n})};x.displayName="DialogFooter";let h=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)(s.Dx,{ref:t,className:(0,i.cn)("text-lg font-semibold leading-none tracking-tight",n),...r})});h.displayName=s.Dx.displayName;let p=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)(s.dk,{ref:t,className:(0,i.cn)("text-sm text-muted-foreground",n),...r})});p.displayName=s.dk.displayName},2403:function(e,t,n){"use strict";n.d(t,{I:function(){return l}});var a=n(651),r=n(2379),s=n(3616);let l=r.forwardRef((e,t)=>{let{className:n,type:r,...l}=e;return(0,a.jsx)("input",{type:r,className:(0,s.cn)("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",n),ref:t,...l})});l.displayName="Input"},4519:function(e,t,n){"use strict";n.d(t,{RM:function(){return d},SC:function(){return o},iA:function(){return l},pj:function(){return u},ss:function(){return c},xD:function(){return i}});var a=n(651),r=n(2379),s=n(3616);let l=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("div",{className:"relative w-full overflow-auto",children:(0,a.jsx)("table",{ref:t,className:(0,s.cn)("w-full caption-bottom text-sm",n),...r})})});l.displayName="Table";let i=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("thead",{ref:t,className:(0,s.cn)("[&_tr]:border-b",n),...r})});i.displayName="TableHeader";let d=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("tbody",{ref:t,className:(0,s.cn)("[&_tr:last-child]:border-0",n),...r})});d.displayName="TableBody",r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("tfoot",{ref:t,className:(0,s.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",n),...r})}).displayName="TableFooter";let o=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("tr",{ref:t,className:(0,s.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",n),...r})});o.displayName="TableRow";let c=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("th",{ref:t,className:(0,s.cn)("h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",n),...r})});c.displayName="TableHead";let u=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("td",{ref:t,className:(0,s.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",n),...r})});u.displayName="TableCell",r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,a.jsx)("caption",{ref:t,className:(0,s.cn)("mt-4 text-sm text-muted-foreground",n),...r})}).displayName="TableCaption"},3616:function(e,t,n){"use strict";n.d(t,{cn:function(){return s}});var a=n(3048),r=n(4826);function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,r.m6)((0,a.W)(t))}},6008:function(e,t,n){"use strict";n.r(t),n.d(t,{__N_SSP:function(){return f},default:function(){return x}});var a=n(651),r=n(20),s=n(2379),l=n(1827),i=n(467),d=n(1186),o=n(2403),c=n(4519),u=n(7944);function m(e){return e&&("object"!=typeof e||0!==Object.keys(e).length)?JSON.stringify(e):"-"}var f=!0;function x(e){let{schedules:t,total:n,page:f,per_page:x,filters:h,admin_key:p}
1=e,b=(0,r.useRouter)(),[g,j]=(0,s.useState)(null),[N,v]=(0,s.useState)(!1),[y,w]=(0,s.useState)(null),[k,S]=(0,s.useState)(""),[_,C]=(0,s.useState)(""),[z,R]=(0,s.useState)("0 0 * * *"),[T,D]=(0,s.useState)(""),[O,I]=(0,s.useState)("0"),[E,J]=(0,s.useState)(!0),P=Math.ceil(n/x);function V(e){let t=new URLSearchParams;for(let[n,a]of(t.set("key",p),Object.entries({enabled:h.enabled,search:h.search,page:String(f),...e})))a&&t.set(n,a);return"/admin/schedules?".concat(t.toString())}async function A(e){j(String(e.action)+(e.id||""));try{let t=await fetch("/api/admin/schedules?key=".concat(p),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();alert(e.message||"Action failed");return}b.replace(b.asPath)}finally{j(null)}}async function F(){let e={};if(T.trim())try{e=JSON.parse(T)}catch(e){alert("Invalid JSON input");return}y?(await A({action:"update",id:y.id,name:k,job_type:_,cron_expr:z,input:e,priority:parseInt(O)||0,enabled:E}),w(null)):(await A({action:"create",name:k,job_type:_,cron_expr:z,input:e,priority:parseInt(O)||0,enabled:E}),v(!1))}return(0,a.jsxs)(l.Z,{title:"Admin - Schedules",admin_key:p,children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold",children:"Crawler Schedules"}),(0,a.jsxs)("p",{className:"text-sm text-muted-foreground mt-1",children:[n," schedules"]})]}),(0,a.jsxs)(u.Vq,{open:N||null!==y,onOpenChange:e=>{e||(v(!1),w(null))},children:[(0,a.jsx)(u.hg,{asChild:!0,children:(0,a.jsx)(d.z,{onClick:function(){w(null),S(""),C(""),R("0 0 * * *"),D(""),I("0"),J(!0),v(!0)},children:"New Schedule"})}),(0,a.jsxs)(u.cZ,{children:[(0,a.jsx)(u.fK,{children:(0,a.jsx)(u.$N,{children:y?"Edit Schedule":"New Schedule"})}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Name"}),(0,a.jsx)(o.I,{value:k,onChange:e=>S(e.target.value),placeholder:"my_daily_job"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Job Type"}),(0,a.jsx)(o.I,{value:_,onChange:e=>C(e.target.value),placeholder:"civitia_fetch_models"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Cron Expression"}),(0,a.jsx)(o.I,{value:z,onChange:e=>R(e.target.value),placeholder:"0 0 * * *"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"minute hour day month weekday"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Input (JSON)"}),(0,a.jsx)("textarea",{className:"w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm font-mono min-h-[80px]",value:T,onChange:e=>D(e.target.value),placeholder:"{}"})]}),(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Priority"}),(0,a.jsx)(o.I,{type:"number",value:O,onChange:e=>I(e.target.value)})]}),(0,a.jsx)("div",{className:"flex items-end pb-1",children:(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:E,onChange:e=>J(e.target.checked),className:"rounded"}),"Enabled"]})})]}),(0,a.jsx)(d.z,{onClick:F,disabled:!k||!_||!z,className:"w-full",children:y?"Update":"Create"})]})]})]})]}),(0,a.jsxs)("div",{className:"flex gap-3 mb-4",children:[(0,a.jsx)("form",{onSubmit:e=>{e.preventDefault();let t=new FormData(e.currentTarget);b.push(V({search:t.get("search")||null,page:"1"}))},children:(0,a.jsx)(o.I,{name:"search",placeholder:"Filter by name...",defaultValue:h.search||"",className:"w-60"})}),(0,a.jsx)(d.z,{variant:"true"===h.enabled?"default":"outline",onClick:()=>b.push(V({enabled:"true"===h.enabled?null:"true",page:"1"})),children:"Enabled"}),(0,a.jsx)(d.z,{variant:"false"===h.enabled?"default":"outline",onClick:()=>b.push(V({enabled:"false"===h.enabled?null:"false",page:"1"})),children:"Disabled"}),(0,a.jsx)(d.z,{variant:"outline",onClick:()=>b.push(V({enabled:null,search:null,page:"1"})),children:"Clear"})]}),(0,a.jsx)("div",{className:"border rounded-lg",children:(0,a.jsxs)(c.iA,{children:[(0,a.jsx)(c.xD,{children:(0,a.jsxs)(c.SC,{children:[(0,a.jsx)(c.ss,{children:"Name"}),(0,a.jsx)(c.ss,{children:"Job Type"}),(0,a.jsx)(c.ss,{children:"Cron"}),(0,a.jsx)(c.ss,{children:"Priority"}),(0,a.jsx)(c.ss,{children:"Input"}),(0,a.jsx)(c.ss,{children:"Next Run"}),(0,a.jsx)(c.ss,{children:"Status"}),(0,a.jsx)(c.ss,{children:"Actions"})]})}),(0,a.jsxs)(c.RM,{children:[0===t.length&&(0,a.jsx)(c.SC,{children:(0,a.jsx)(c.pj,{colSpan:8,className:"text-center text-muted-foreground py-8",children:"No schedules found"})}),t.map(e=>{var t;return(0,a.jsxs)(c.SC,{className:e.enabled?"":"opacity-50",children:[(0,a.jsx)(c.pj,{className:"font-mono text-sm",children:e.name}),(0,a.jsx)(c.pj,{className:"font-mono text-sm",children:e.job_type}),(0,a.jsx)(c.pj,{className:"font-mono text-sm",children:e.cron_expr}),(0,a.jsx)(c.pj,{children:e.priority}),(0,a.jsx)(c.pj,{className:"font-mono text-xs max-w-[200px] truncate",title:JSON.stringify(e.input),children:m(e.input)}),(0,a.jsx)(c.pj,{className:"text-sm whitespace-nowrap",children:(t=e.next_run_at)?new Date(t).toLocaleStr
1ing():"-"}),(0,a.jsx)(c.pj,{children:(0,a.jsx)(i.C,{className:e.enabled?"bg-green-100 text-green-800 border-green-200":"bg-gray-100 text-gray-800 border-gray-200",children:e.enabled?"enabled":"disabled"})}),(0,a.jsx)(c.pj,{children:(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(d.z,{size:"sm",variant:"outline",onClick:()=>{w(e),S(e.name),C(e.job_type),R(e.cron_expr),D("-"===m(e.input)?"":JSON.stringify(e.input,null,2)),I(String(e.priority)),J(e.enabled)},children:"Edit"}),(0,a.jsx)(d.z,{size:"sm",variant:"outline",disabled:g==="toggle"+e.id,onClick:()=>A({action:"toggle",id:e.id}),children:e.enabled?"Disable":"Enable"}),(0,a.jsx)(d.z,{size:"sm",variant:"outline",disabled:g==="trigger_now"+e.id||!e.enabled,onClick:()=>A({action:"trigger_now",id:e.id}),children:"Run Now"}),(0,a.jsx)(d.z,{size:"sm",variant:"destructive",disabled:g==="delete"+e.id,onClick:()=>{confirm('Delete schedule "'.concat(e.name,'"?'))&&A({action:"delete",id:e.id})},children:"Delete"})]})})]},e.id)})]})]})}),P>1&&(0,a.jsxs)("div",{className:"flex items-center justify-between mt-4",children:[(0,a.jsxs)("span",{className:"text-sm text-muted-foreground",children:["Page ",f," of ",P," (",n," schedules)"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.z,{variant:"outline",size:"sm",disabled:f<=1,onClick:()=>b.push(V({page:String(f-1)})),children:"Previous"}),(0,a.jsx)(d.z,{variant:"outline",size:"sm",disabled:f>=P,onClick:()=>b.push(V({page:String(f+1)})),children:"Next"})]})]})]})}}},function(e){e.O(0,[23,888,774,179],function(){return e(e.s=6387)}),_N_E=e.O()}]);
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.