| 1 |
- import{i as e}from"./chunk-aKtaBQYM.js";import{C as t,D as n,a as r,w as i}from"./client-BdOyoZJz.js";import{n as a}from"./QueryClientProvider-Clbyr4Jg.js";import{t as o}from"./useQuery-CCy0EwsM.js";import{t as s}from"./useMutation-qh3Iyscy.js";import{t as c}from"./arrow-left-MSgMxOFV.js";import{n as l}from"./ToastContext-VFOrCCoA.js";import{t as u}from"./loader-circle-CB4leTZa.js";import{t as d}from"./file-DDkFXH-b.js";import{t as f}from"./Button-pwVKPiYn.js";import{v as p}from"./date-G9KUauqz.js";import{At as m,Gt as h,Rn as g,Ut as _,Vn as v,_t as y,yt as b}from"./index-BoVbGTav.js";var x=e(n(),1),S=t();function C(e){let t=p(e);if(!t)return``;let n=Math.ceil((t.getTime()-Date.now())/(1e3*60*60*24));return n<=0?`any moment`:n===1?`1 day`:`${n} days`}function w(e){let t=p(e);return t?t.toLocaleString():e}function T(){let{t:e}=i(),t=v(),n=a(),{showToast:p}=l(),{hasPermission:T,authEnabled:E}=b(),[D,O]=(0,x.useState)(null),[k,A]=(0,x.useState)(new Set),j=!E||T(`library:purge`),M=o({queryKey:[`library-trash`],queryFn:()=>r.listLibraryTrash(200,0)}),N=o({queryKey:[`library-trash-settings`],queryFn:()=>r.getLibraryTrashSettings(),enabled:j}),[P,F]=(0,x.useState)(null);(0,x.useEffect)(()=>{N.data&&P===null&&F(N.data.retention_days)},[N.data,P]);let I=s({mutationFn:e=>{let t=N.data;return r.updateLibraryTrashSettings({retention_days:e,auto_purge_enabled:t?.auto_purge_enabled??!1,auto_purge_days:t?.auto_purge_days??90,auto_purge_include_never_printed:t?.auto_purge_include_never_printed??!0})},onSuccess:t=>{p(e(`libraryTrash.toast.retentionSaved`,{days:t.retention_days}),`success`),n.invalidateQueries({queryKey:[`library-trash-settings`]}),n.invalidateQueries({queryKey:[`library-trash`]})},onError:t=>p(t.message||e(`libraryTrash.toast.retentionFailed`),`error`)}),L=s({mutationFn:e=>r.restoreLibraryTrash(e),onSuccess:()=>{p(e(`libraryTrash.toast.restored`),`success`),n.invalidateQueries({queryKey:[`library-trash`]}),n.invalidateQueries({queryKey:[`library-trash-count`]}),n.invalidateQueries({queryKey:[`library-files`]}),n.invalidateQueries({queryKey:[`library-folders`]})},onError:t=>p(t.message||e(`libraryTrash.toast.restoreFailed`),`error`)}),R=s({mutationFn:e=>r.hardDeleteLibraryTrash(e),onSuccess:()=>{p(e(`libraryTrash.toast.purged`),`success`),n.invalidateQueries({queryKey:[`library-trash`]}),n.invalidateQueries({queryKey:[`library-trash-count`]})},onError:t=>p(t.message||e(`libraryTrash.toast.purgeFailed`),`error`)}),z=s({mutationFn:()=>r.emptyLibraryTrash(),onSuccess:t=>{p(e(`libraryTrash.toast.emptied`,{count:t.deleted}),`success`),n.invalidateQueries({queryKey:[`library-trash`]}),n.invalidateQueries({queryKey:[`library-trash-count`]})},onError:t=>p(t.message||e(`libraryTrash.toast.emptyFailed`),`error`)}),B=s({mutationFn:e=>Promise.all(e.map(e=>r.restoreLibraryTrash(e))),onSuccess:(t,r)=>{p(e(`libraryTrash.toast.bulkRestored`,{count:r.length}),`success`),A(new Set),n.invalidateQueries({queryKey:[`library-trash`]}),n.invalidateQueries({queryKey:[`library-trash-count`]}),n.invalidateQueries({queryKey:[`library-files`]}),n.invalidateQueries({queryKey:[`library-folders`]})},onError:t=>p(t.message||e(`libraryTrash.toast.restoreFailed`),`error`)}),V=s({mutationFn:e=>Promise.all(e.map(e=>r.hardDeleteLibraryTrash(e))),onSuccess:(t,r)=>{p(e(`libraryTrash.toast.bulkPurged`,{count:r.length}),`success`),A(new Set),n.invalidateQueries({queryKey:[`library-trash`]}),n.invalidateQueries({queryKey:[`library-trash-count`]})},onError:t=>p(t.message||e(`libraryTrash.toast.purgeFailed`),`error`)}),H=(0,x.useMemo)(()=>M.data?.items??[],[M.data?.items]),U=M.data?.retention_days??30,W=(0,x.useMemo)(()=>H.reduce((e,t)=>e+t.file_size,0),[H]),G=H.length>0&&H.every(e=>k.has(e.id)),K=k.size>0&&!G,q=e=>{A(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return(0,S.jsxs)(`div`,{className:`p-6 max-w-screen-2xl mx-auto`,children:[(0,S.jsx)(`div`,{className:`flex items-center gap-3 mb-4`,children:(0,S.jsxs)(g,{to:`/files`,className:`inline-flex items-center gap-1 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200`,children:[(0,S.jsx)(c,{className:`w-4 h-4`}),` `,e(`libraryTrash.backToFiles`)]})}),(0,S.jsxs)(`div`,{className:`flex items-start justify-between mb-6 gap-4 flex-wrap`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h1`,{className:`text-2xl font-bold text-gray-900 dark:text-gray-100`,children:e(`libraryTrash.title`)}),(0,S.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-gray-400 mt-1`,children:e(j?`libraryTrash.subtitleAdmin`:`libraryTrash.subtitleUser`,{days:U})})]}),H.length>0&&(0,S.jsxs)(f,{variant:`secondary`,onClick:()=>O({type:`empty`}),className:`text-red-600 dark:text-red-400`,children:[(0,S.jsx)(m,{className:`w-4 h-4 mr-1`}),e(`libraryTrash.emptyTrash`)]})]}),j&&N.data&&(0,S.jsxs)(`div`,{className:`mb-4 border border-gray-200 dark:border-gray-700 rounded-lg p-3 flex items-center gap-3 bg-gray-50 dark:bg-gray-800/40`,children:[(0,S.jsx)(`label`,{htmlFor:`retention-days`,className:`text-sm font-medium text-gray-700 dark:text-gray-300`,children:e(`libraryTrash.retentionLabel`)}),(0,S.jsx)(`input`,{id:`retention-days`,type:`number`,min:1,max:365,value:P??N.data.retention_days,onChange:e=>F(Math.max(1,Math.min(365,parseInt(e.target.value||`0`,10)||0))),className:`w-20 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm px-2 py-1 text-gray-900 dark:text-gray-100`}),(0,S.jsx)(`span`,{className:`text-sm text-gray-600 dark:text-gray-400`,children:e(`libraryTrash.days`)}),(0,S.jsxs)(f,{variant:`secondary`,onClick:()=>P!=null&&I.mutate(P),disabled:I.isPending||P==null||P===N.data.retention_days,className:`ml-auto`,children:[(0,S.jsx)(_,{className:`w-4 h-4 mr-1`}),e(`common.save`)]})]}),M.isLoading?(0,S.jsxs)(`div`,{className:`flex items-center gap-2 text-gray-500 dark:text-gray-400`,children:[(0,S.jsx)(u,{className:`w-4 h-4 animate-spin`}),` `,e(`libraryTrash.loading`)]}):H.length===0?(0,S.jsx)(`div`,{className:`border border-dashed border-gray-300 dark:border-gray-700 rounded-lg p-12 text-center`,children:(0,S.jsx)(`p`,{className:`text-gray-500 dark:text-gray-400`,children:e(`libraryTrash.empty`)})}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,S.jsx)(`div`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:e(`libraryTrash.summary`,{count:H.length,size:d(W)})}),k.size>0&&(0,S.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,S.jsx)(`span`,{className:`text-gray-600 dark:text-gray-400`,children:e(`libraryTrash.selectionCount`,{count:k.size})}),(0,S.jsxs)(f,{variant:`secondary`,onClick:()=>B.mutate(Array.from(k)),disabled:B.isPending,children:[(0,S.jsx)(h,{className:`w-4 h-4 mr-1`}),e(`libraryTrash.bulkRestore`)]}),(0,S.jsxs)(f,{variant:`secondary`,onClick:()=>O({type:`bulkDelete`,count:k.size}),disabled:V.isPending,className:`text-red-600 dark:text-red-400`,children:[(0,S.jsx)(m,{className:`w-4 h-4 mr-1`}),e(`libraryTrash.bulkPurge`)]})]})]}),(0,S.jsx)(`div`,{className:`border border-gray-200 dark:border-gray-700 rounded-lg overflow-x-auto`,children:(0,S.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,S.jsx)(`thead`,{className:`bg-gray-50 dark:bg-gray-800 text-left text-gray-600 dark:text-gray-300`,children:(0,S.jsxs)(`tr`,{children:[(0,S.jsx)(`th`,{className:`px-3 py-2 w-10`,children:(0,S.jsx)(`input`,{type:`checkbox`,checked:G,ref:e=>{e&&(e.indeterminate=K)},onChange:()=>{A(e=>e.size===H.length?new Set:new Set(H.map(e=>e.id)))},"aria-label":e(`libraryTrash.selectAll`),className:`rounded border-gray-300 cursor-pointer`})}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:e(`libraryTrash.col.filename`)}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:e(`libraryTrash.col.folder`)}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium text-right`,children:e(`libraryTrash.col.size`)}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium whitespace-nowrap`,children:e(`libraryTrash.col.deleted`)}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium whitespace-nowrap`,children:e(`libraryTrash.col.autoPurge`)}),j&&(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:e(`libraryTrash.col.owner`)}),(0,S.jsx)(`th`,{className:`px-3 py-2 font-medium text-right`,children:e(`libraryTrash.col.actions`)})]})}),(0,S.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-gray-800`,children:H.map(t=>(0,S.jsxs)(`tr`,{className:`hover:bg-gray-50 dark:hover:bg-gray-800/50`,children:[(0,S.jsx)(`td`,{className:`px-3 py-2`,children:(0,S.jsx)(`input`,{type:`checkbox`,checked:k.has(t.id),onChange:()=>q(t.id),"aria-label":e(`libraryTrash.selectOne`,{filename:t.filename}),className:`rounded border-gray-300 cursor-pointer`})}),(0,S.jsx)(`td`,{className:`px-3 py-2 text-gray-900 dark:text-gray-100 truncate max-w-md`,title:t.filename,children:t.filename}),(0,S.jsx)(`td`,{className:`px-3 py-2 text-gray-600 dark:text-gray-400`,children:t.folder_name??`—`}),(0,S.jsx)(`td`,{className:`px-3 py-2 text-right text-gray-600 dark:text-gray-400 tabular-nums whitespace-nowrap`,children:d(t.file_size)}),(0,S.jsx)(`td`,{className:`px-3 py-2 text-gray-600 dark:text-gray-400 whitespace-nowrap`,children:w(t.deleted_at)}),(0,S.jsx)(`td`,{className:`px-3 py-2 text-gray-600 dark:text-gray-400 whitespace-nowrap`,children:(0,S.jsx)(`span`,{title:w(t.auto_purge_at),children:e(`libraryTrash.autoPurgeIn`,{when:C(t.auto_purge_at)})})}),j&&(0,S.jsx)(`td`,{className:`px-3 py-2 text-gray-600 dark:text-gray-400`,children:t.created_by_username??`—`}),(0,S.jsxs)(`td`,{className:`px-3 py-2 text-right whitespace-nowrap`,children:[(0,S.jsxs)(`button`,{onClick:()=>L.mutate(t.id),disabled:L.isPending,className:`inline-flex items-center gap-1 px-2 py-1 text-xs text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300`,children:[(0,S.jsx)(h,{className:`w-3.5 h-3.5`}),e(`libraryTrash.restore`)]}),(0,S.jsxs)(`button`,{onClick:()=>O({type:`delete`,id:t.id,filename:t.filename}),disabled:R.isPending,className:`inline-flex items-center gap-1 px-2 py-1 text-xs text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300 ml-2`,children:[(0,S.jsx)(m,{className:`w-3.5 h-3.5`}),e(`libraryTrash.purgeNow`)]})]})]},t.id))})]})})]}),D&&(0,S.jsx)(y,{onCancel:()=>O(null),onConfirm:()=>{D&&(D.type===`delete`?R.mutate(D.id):D.type===`bulkDelete`?V.mutate(Array.from(k)):z.mutate(),O(null))},title:D.type===`delete`?e(`libraryTrash.confirm.purgeTitle`):D.type===`bulkDelete`?e(`libraryTrash.confirm.bulkPurgeTitle`):e(`libraryTrash.confirm.emptyTitle`),message:D.type===`delete`?e(`libraryTrash.confirm.purgeBody`,{filename:D.filename}):D.type===`bulkDelete`?e(`libraryTrash.confirm.bulkPurgeBody`,{count:D.count}):e(`libraryTrash.confirm.emptyBody`,{count:H.length}),confirmText:e(`libraryTrash.confirm.cta`),variant:`danger`}),M.isError&&(0,S.jsxs)(`div`,{className:`mt-4 text-sm text-red-600 dark:text-red-400`,children:[M.error?.message??e(`libraryTrash.loadError`),(0,S.jsx)(f,{variant:`secondary`,onClick:()=>t(`/files`),className:`ml-3`,children:e(`libraryTrash.backToFiles`)})]})]})}export{T as LibraryTrashPage};
|