Files
yakpanel-core/YakPanel-server/frontend/dist/assets/FilesPage-B-ZILwyi.js
2026-04-07 05:05:28 +05:30

2 lines
6.8 KiB
JavaScript

import{r as l,j as e,p as q,q as G,t as J,w as O,v as Q,x as Y,y as Z,z as ee}from"./index-cE9w-Kq7.js";import{M as r}from"./Modal-CL3xZqxR.js";import{A as te}from"./AdminAlert-yrdXFH0e.js";import{A as c}from"./AdminButton-ByutG8m-.js";import{A as ne}from"./AdminTable-eCi7S__-.js";import{E as se}from"./EmptyState-CmnFWkSO.js";import{P as ae}from"./PageHeader-HdM4gpcn.js";function le(s){return s<1024?s+" B":s<1024*1024?(s/1024).toFixed(1)+" KB":(s/1024/1024).toFixed(1)+" MB"}const ie=[".txt",".html",".htm",".css",".js",".json",".xml",".md",".py",".php",".sh",".conf",".env"];function pe(){const[s,z]=l.useState("/"),[g,A]=l.useState([]),[H,N]=l.useState(!0),[y,i]=l.useState(""),[k,v]=l.useState(null),[w,C]=l.useState(!1),[m,u]=l.useState(null),[S,F]=l.useState(""),[E,B]=l.useState(!1),[M,h]=l.useState(!1),[_,x]=l.useState(""),[d,p]=l.useState(null),[j,f]=l.useState(""),D=l.useRef(null),o=t=>{N(!0),i(""),q(t).then(n=>{z(n.path),A(n.items.sort((a,b)=>a.is_dir===b.is_dir?0:a.is_dir?-1:1))}).catch(n=>i(n.message)).finally(()=>N(!1))};l.useEffect(()=>{o(s)},[]);const R=t=>{if(t.is_dir){const n=s.endsWith("/")?s+t.name:s+"/"+t.name;o(n)}},T=()=>{const t=s.replace(/\/$/,"").split("/").filter(Boolean);if(t.length<=1)return;t.pop();const n=t.length===0?"/":"/"+t.join("/");o(n)},U=t=>{if(t.is_dir)return;const n=s.endsWith("/")?s+t.name:s+"/"+t.name;v(t.name),Z(n).catch(a=>i(a.message)).finally(()=>v(null))},W=t=>{var a;const n=(a=t.target.files)==null?void 0:a[0];n&&(C(!0),i(""),G(s,n).then(()=>o(s)).catch(b=>i(b.message)).finally(()=>{C(!1),t.target.value=""}))},$=t=>{const n=s.endsWith("/")?s+t.name:s+"/"+t.name;Y(n).then(a=>{u(n),F(typeof a.content=="string"?a.content:String(a.content))}).catch(a=>i(a.message))},I=()=>{m&&(B(!0),O(m,S).then(()=>{u(null),o(s)}).catch(t=>i(t.message)).finally(()=>B(!1)))},K=t=>ie.some(n=>t.toLowerCase().endsWith(n)),L=t=>{t.preventDefault();const n=_.trim();n&&J(s,n).then(()=>{h(!1),x(""),o(s)}).catch(a=>i(a.message))},P=()=>{if(!d||!j.trim())return;const t=j.trim();if(t===d.name){p(null);return}Q(s,d.name,t).then(()=>{p(null),f(""),o(s)}).catch(n=>i(n.message))},V=t=>{confirm(`Delete ${t.is_dir?"folder":"file"} "${t.name}"?`)&&ee(s,t.name,t.is_dir).then(()=>o(s)).catch(n=>i(n.message))},X=s.split("/").filter(Boolean).length>0;return e.jsxs(e.Fragment,{children:[e.jsx(ae,{title:"Files"}),e.jsxs("div",{className:"d-flex flex-wrap align-items-center gap-2 mb-3",children:[e.jsxs(c,{variant:"secondary",size:"sm",onClick:T,disabled:!X,children:[e.jsx("i",{className:"ti ti-arrow-left me-1","aria-hidden":!0}),"Back"]}),e.jsx("input",{ref:D,type:"file",className:"d-none",onChange:W}),e.jsxs(c,{variant:"success",size:"sm",onClick:()=>h(!0),children:[e.jsx("i",{className:"ti ti-folder-plus me-1","aria-hidden":!0}),"New Folder"]}),e.jsxs(c,{variant:"primary",size:"sm",onClick:()=>{var t;return(t=D.current)==null?void 0:t.click()},disabled:w,children:[w?e.jsx("span",{className:"spinner-border spinner-border-sm me-1",role:"status"}):e.jsx("i",{className:"ti ti-upload me-1","aria-hidden":!0}),"Upload"]}),e.jsxs("code",{className:"small bg-body-secondary px-2 py-1 rounded ms-auto text-break",children:["Path: ",s]})]}),e.jsxs(r,{show:M,onHide:()=>{h(!1),x("")},centered:!0,children:[e.jsx(r.Header,{closeButton:!0,children:e.jsx(r.Title,{children:"New Folder"})}),e.jsxs("form",{onSubmit:L,children:[e.jsx(r.Body,{children:e.jsx("input",{value:_,onChange:t=>x(t.target.value),placeholder:"Folder name",className:"form-control",autoFocus:!0})}),e.jsxs(r.Footer,{children:[e.jsx(c,{type:"button",variant:"secondary",onClick:()=>{h(!1),x("")},children:"Cancel"}),e.jsx(c,{type:"submit",variant:"success",children:"Create"})]})]})]}),e.jsxs(r,{show:!!m,onHide:()=>u(null),fullscreen:"lg-down",size:"lg",children:[e.jsx(r.Header,{closeButton:!0,children:e.jsx(r.Title,{className:"text-break small font-monospace",children:m})}),e.jsx(r.Body,{className:"d-flex flex-column p-0",style:{minHeight:400},children:e.jsx("textarea",{value:S,onChange:t=>F(t.target.value),className:"form-control font-monospace small flex-grow-1 rounded-0 border-0",style:{minHeight:400},spellCheck:!1})}),e.jsxs(r.Footer,{children:[e.jsx(c,{variant:"secondary",onClick:()=>u(null),children:"Cancel"}),e.jsx(c,{variant:"primary",onClick:I,disabled:E,children:E?"Saving…":"Save"})]})]}),y?e.jsx(te,{className:"mb-3",children:y}):null,e.jsx("div",{className:"card",children:H?e.jsx("div",{className:"card-body text-center py-5",children:e.jsx("span",{className:"spinner-border text-secondary",role:"status"})}):e.jsxs(ne,{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Size"}),e.jsx("th",{className:"text-end",children:"Actions"})]})}),e.jsx("tbody",{children:g.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:3,className:"p-0",children:e.jsx(se,{title:"Empty directory",description:"Upload files or create a folder."})})}):g.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsxs("button",{type:"button",onClick:()=>R(t),className:"btn btn-link text-start text-decoration-none p-0 d-inline-flex align-items-center gap-2",children:[e.jsx("i",{className:`ti ${t.is_dir?"ti-folder text-warning":"ti-file text-secondary"}`,"aria-hidden":!0}),e.jsx("span",{children:t.name})]})}),e.jsx("td",{className:"text-secondary",children:t.is_dir?"—":le(t.size)}),e.jsx("td",{className:"text-end",children:(d==null?void 0:d.name)===t.name?e.jsxs("span",{className:"d-inline-flex gap-1 align-items-center flex-wrap justify-content-end",children:[e.jsx("input",{value:j,onChange:n=>f(n.target.value),onKeyDown:n=>n.key==="Enter"&&P(),className:"form-control form-control-sm",style:{width:"8rem"},autoFocus:!0}),e.jsx("button",{type:"button",className:"btn btn-link btn-sm text-success p-1",title:"Save",onClick:P,children:e.jsx("i",{className:"ti ti-check","aria-hidden":!0})}),e.jsx("button",{type:"button",className:"btn btn-link btn-sm p-1",onClick:()=>{p(null),f("")},children:"Cancel"})]}):e.jsxs("span",{className:"d-inline-flex gap-1 justify-content-end",children:[e.jsx("button",{type:"button",className:"btn btn-link btn-sm text-secondary p-1",title:"Rename",onClick:()=>{p(t),f(t.name)},children:e.jsx("i",{className:"ti ti-pencil","aria-hidden":!0})}),!t.is_dir&&K(t.name)?e.jsx("button",{type:"button",className:"btn btn-link btn-sm text-warning p-1",title:"Edit",onClick:()=>$(t),children:e.jsx("i",{className:"ti ti-edit","aria-hidden":!0})}):null,t.is_dir?null:e.jsx("button",{type:"button",className:"btn btn-link btn-sm text-primary p-1",title:"Download",disabled:k===t.name,onClick:()=>U(t),children:k===t.name?e.jsx("span",{className:"spinner-border spinner-border-sm",role:"status"}):e.jsx("i",{className:"ti ti-download","aria-hidden":!0})}),e.jsx("button",{type:"button",className:"btn btn-link btn-sm text-danger p-1",title:"Delete",onClick:()=>V(t),children:e.jsx("i",{className:"ti ti-trash","aria-hidden":!0})})]})})]},t.name))})]})})]})}export{pe as FilesPage};