Files
yakpanel-core/YakPanel-server/frontend/dist/assets/BackupPlansPage-CgzFMegr.js

2 lines
8.2 KiB
JavaScript
Raw Normal View History

2026-04-07 09:46:22 +05:30
import{r as l,a1 as I,a as R,j as e,a2 as G,a3 as J,a4 as K,a5 as W}from"./index-CRR9sQ49.js";import{M as n}from"./Modal-B7V4w_St.js";import{A as X}from"./AdminAlert-DW1IRWce.js";import{A as m}from"./AdminButton-Bd2cLTu3.js";import{A as Z}from"./AdminTable-BLiLxfnS.js";import{E as ee}from"./EmptyState-C61VdEFl.js";import{P as q}from"./PageHeader-BcjNf7GG.js";function de(){var A,D;const[g,v]=l.useState([]),[u,L]=l.useState([]),[h,$]=l.useState([]),[w,k]=l.useState(!0),[_,d]=l.useState(""),[F,x]=l.useState(!1),[S,P]=l.useState(!1),[r,p]=l.useState(null),[c,C]=l.useState("site"),[b,T]=l.useState(!1),[f,B]=l.useState(null),[E,H]=l.useState("site"),N=()=>{I().then(v).catch(a=>d(a.message))};l.useEffect(()=>{k(!0),Promise.all([I(),R("/site/list"),R("/database/list")]).then(([a,s,t])=>{v(a),L(s),$(t.filter(i=>["MySQL","PostgreSQL","MongoDB"].includes(i.db_type)))}).catch(a=>d(a.message)).finally(()=>k(!1))},[]);const M=a=>{a.preventDefault();const s=a.currentTarget,t=s.elements.namedItem("name").value.trim(),i=s.elements.namedItem("plan_type").value,o=Number(s.elements.namedItem("target_id").value),j=s.elements.namedItem("schedule").value.trim(),y=s.elements.namedItem("enabled").checked;if(!t||!j||!o){d("Name, target and schedule are required");return}P(!0),W({name:t,plan_type:i,target_id:o,schedule:j,enabled:y}).then(()=>{x(!1),s.reset(),N()}).catch(z=>d(z.message)).finally(()=>P(!1))},V=(a,s)=>{confirm(`Delete backup plan "${s}"?`)&&J(a).then(N).catch(t=>d(t.message))},Q=a=>{p(a),C(a.plan_type)},U=a=>{if(a.preventDefault(),!r)return;const s=a.currentTarget,t=s.elements.namedItem("edit_name").value.trim(),i=Number(s.elements.namedItem("edit_target_id").value),o=s.elements.namedItem("edit_schedule").value.trim(),j=s.elements.namedItem("edit_enabled").checked;!t||!o||!i||K(r.id,{name:t,plan_type:c,target_id:i,schedule:o,enabled:j}).then(()=>{p(null),N()}).catch(y=>d(y.message))},O=()=>{T(!0),B(null),G().then(a=>B(a.results)).catch(a=>d(a.message)).finally(()=>T(!1))},Y=a=>{if(a.plan_type==="site"){const t=u.find(i=>i.id===a.target_id);return t?t.name:`#${a.target_id}`}const s=h.find(t=>t.id===a.target_id);return s?s.name:`#${a.target_id}`};return w?e.jsxs(e.Fragment,{children:[e.jsx(q,{title:"Backup Plans"}),e.jsx("p",{className:"text-secondary",children:"Loading…"})]}):e.jsxs(e.Fragment,{children:[e.jsx(q,{title:"Backup Plans",actions:e.jsxs("div",{className:"d-flex flex-wrap gap-2",children:[e.jsxs(m,{variant:"primary",disabled:b,onClick:O,children:[b?e.jsx("span",{className:"spinner-border spinner-border-sm me-1",role:"status"}):e.jsx("i",{className:"ti ti-player-play me-1","aria-hidden":!0}),b?"Running…":"Run Scheduled"]}),e.jsxs(m,{variant:"primary",onClick:()=>x(!0),children:[e.jsx("i",{className:"ti ti-plus me-1","aria-hidden":!0}),"Add Plan"]})]})}),_?e.jsx(X,{className:"mb-3",children:_}):null,f&&f.length>0?e.jsx("div",{className:"card mb-3",children:e.jsxs("div",{className:"card-body py-3",children:[e.jsx("h6",{className:"mb-2",children:"Last run results"}),e.jsx("ul",{className:"mb-0 small list-unstyled",children:f.map((a,s)=>e.jsxs("li",{children:[a.plan,": ",a.status==="ok"?"✓":a.status==="skipped"?"⊘":"✗"," ",a.msg||""]},s))})]})}):null,e.jsxs("p",{className:"small text-secondary mb-3",children:["Schedule automated backups. Add a cron entry (e.g. ",e.jsx("code",{children:"0 * * * *"})," hourly) to call"," ",e.jsx("code",{children:"POST /api/v1/backup/run-scheduled"})," with your auth token."]}),e.jsx("div",{className:"card",children:e.jsxs(Z,{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Target"}),e.jsx("th",{children:"Schedule"}),e.jsx("th",{children:"Enabled"}),e.jsx("th",{className:"text-end",children:"Actions"})]})}),e.jsx("tbody",{children:g.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-0",children:e.jsx(ee,{title:"No backup plans",description:'Click "Add Plan" to create one.'})})}):g.map(a=>e.jsxs("tr",{children:[e.jsx("td",{children:a.name}),e.jsx("td",{children:a.plan_type}),e.jsx("td