Files
app/dist/assets/Users-WLgfF24I.js
Simon 019a8355dc fix: stahování souborů ve filemanageru - chybějící auth token
window.open() neposílá JWT header, přepsáno na apiFetch() + blob download.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:31:32 +01:00

2 lines
8.9 KiB
JavaScript

import{j as e,m as u,A as H}from"./vendor-animation-0s3FMHwK.js";import{r as n}from"./vendor-react-BVs3cwbi.js";import{u as J,a as V,b as W,c as v,F as c,C as I}from"./index-Bay45BGf.js";import{F as Z}from"./Forbidden-D25jV3Oq.js";import"./vendor-utils-Dyr8OjFr.js";const p="/api/admin";function se(){const{user:r,updateUser:C,hasPermission:U}=J(),t=V(),[S,M]=n.useState([]),[b,$]=n.useState([]),[z,E]=n.useState(!0),[f,x]=n.useState(!1),[o,j]=n.useState(null),[m,N]=n.useState({isOpen:!1,user:null}),[T,g]=n.useState(!1),[s,l]=n.useState({username:"",email:"",password:"",first_name:"",last_name:"",role_id:"",is_active:!0});W(f);const h=n.useCallback(async()=>{try{const i=await(await v(`${p}/users.php`,{})).json();i.success?(M(i.data.users||[]),$(i.data.roles||[])):t.error(i.error||"Nepodařilo se načíst uživatele")}catch{t.error("Chyba připojení")}finally{E(!1)}},[]);if(n.useEffect(()=>{h()},[h]),!U("users.view"))return e.jsx(Z,{});const A=()=>{j(null),l({username:"",email:"",password:"",first_name:"",last_name:"",role_id:b[0]?.id||"",is_active:!0}),x(!0)},P=a=>{j(a),l({username:a.username,email:a.email,password:"",first_name:a.first_name,last_name:a.last_name,role_id:a.role_id,is_active:a.is_active}),x(!0)},y=()=>{x(!1),j(null)},D=async a=>{a?.preventDefault();const i={...s},d=o,k=o?.id;try{const R=d?`${p}/users.php?id=${k}`:`${p}/users.php`,w=await(await v(R,{method:d?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})).json();w.success?(d&&r&&Number(k)===Number(r.id)&&C({username:i.username,email:i.email,fullName:`${i.first_name} ${i.last_name}`.trim()}),y(),await new Promise(L=>setTimeout(L,300)),t.success(d?"Uživatel byl upraven":"Uživatel byl vytvořen"),h()):t.error(w.error||"Nepodařilo se uložit uživatele")}catch{t.error("Chyba připojení")}},O=a=>{N({isOpen:!0,user:a})},_=()=>{N({isOpen:!1,user:null})},F=async()=>{if(m.user){g(!0);try{const i=await(await v(`${p}/users.php?id=${m.user.id}`,{method:"DELETE"})).json();i.success?(_(),h(),t.success("Uživatel byl smazán")):t.error(i.error||"Nepodařilo se smazat uživatele")}catch{t.error("Chyba připojení")}finally{g(!1)}}},q=async a=>{try{const d=await(await v(`${p}/users.php?id=${a.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({is_active:!a.is_active})})).json();d.success?(h(),t.success(a.is_active?"Uživatel byl deaktivován":"Uživatel byl aktivován")):t.error(d.error||"Nepodařilo se změnit stav uživatele")}catch{t.error("Chyba připojení")}},B=a=>{switch(a){case"admin":return"admin-badge admin-badge-admin";default:return"admin-badge admin-badge-viewer"}};return z?e.jsxs("div",{className:"admin-skeleton",style:{padding:0,gap:"1.5rem"},children:[e.jsxs("div",{className:"admin-skeleton-row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{children:[e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"200px",marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line",style:{width:"140px"}})]}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"160px",borderRadius:"8px"}})]}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2,3,4].map(a=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line circle"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"admin-skeleton-line w-1/3 mb-2"}),e.jsx("div",{className:"admin-skeleton-line w-1/4",style:{height:"10px"}})]}),e.jsx("div",{className:"admin-skeleton-line w-1/4"})]},a))})})]}):e.jsxs("div",{children:[e.jsxs(u.div,{className:"admin-page-header",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},children:[e.jsxs("div",{children:[e.jsx("h1",{className:"admin-page-title",children:"Uživatelé"}),e.jsx("p",{className:"admin-page-subtitle",children:"Správa uživatelských účtů a oprávnění"})]}),e.jsxs("button",{onClick:A,className:"admin-btn admin-btn-primary",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Přidat uživatele"]})]}),e.jsx(u.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:e.jsx("div",{className:"admin-card-body",children:e.jsx("div",{className:"admin-table-responsive",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Uživatel"}),e.jsx("th",{children:"E-mail"}),e.jsx("th",{children:"Role"}),e.jsx("th",{children:"Stav"}),e.jsx("th",{children:"Akce"})]})}),e.jsx("tbody",{children:S.map(a=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsxs("div",{className:"admin-table-user",children:[e.jsx("div",{className:"admin-table-avatar",children:(a.first_name||a.username).charAt(0).toUpperCase()}),e.jsxs("div",{children:[e.jsxs("div",{className:"admin-table-name",children:[a.first_name," ",a.last_name]}),e.jsxs("div",{className:"admin-table-username",children:["@",a.username]})]})]})}),e.jsx("td",{children:a.email}),e.jsx("td",{children:e.jsx("span",{className:B(a.role_name),children:a.role_display_name||a.role_name})}),e.jsx("td",{children:e.jsx("button",{onClick:()=>a.id!==r?.id&&q(a),disabled:a.id===r?.id,className:`admin-badge ${a.is_active?"admin-badge-active":"admin-badge-inactive"}`,style:{cursor:a.id===r?.id?"not-allowed":"pointer"},children:a.is_active?"Aktivní":"Neaktivní"})}),e.jsx("td",{children:e.jsxs("div",{className:"admin-table-actions",children:[e.jsx("button",{onClick:()=>P(a),className:"admin-btn-icon",title:"Upravit","aria-label":"Upravit",children:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})}),a.id!==r?.id&&e.jsx("button",{onClick:()=>O(a),className:"admin-btn-icon danger",title:"Smazat","aria-label":"Smazat",children:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"3 6 5 6 21 6"}),e.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]})})]})})]},a.id))})]})})})}),e.jsx(H,{children:f&&e.jsxs(u.div,{className:"admin-modal-overlay",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2},children:[e.jsx("div",{className:"admin-modal-backdrop",onClick:y}),e.jsxs(u.div,{className:"admin-modal",initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{duration:.2},children:[e.jsx("div",{className:"admin-modal-header",children:e.jsx("h2",{className:"admin-modal-title",children:o?"Upravit uživatele":"Přidat nového uživatele"})}),e.jsx("div",{className:"admin-modal-body",children:e.jsxs("div",{className:"admin-form",children:[e.jsxs("div",{className:"admin-form-row",children:[e.jsx(c,{label:"Jméno",children:e.jsx("input",{type:"text",value:s.first_name,onChange:a=>l({...s,first_name:a.target.value}),required:!0,className:"admin-form-input"})}),e.jsx(c,{label:"Příjmení",children:e.jsx("input",{type:"text",value:s.last_name,onChange:a=>l({...s,last_name:a.target.value}),required:!0,className:"admin-form-input"})})]}),e.jsx(c,{label:"Uživatelské jméno",children:e.jsx("input",{type:"text",value:s.username,onChange:a=>l({...s,username:a.target.value}),required:!0,className:"admin-form-input"})}),e.jsx(c,{label:"E-mail",children:e.jsx("input",{type:"email",value:s.email,onChange:a=>l({...s,email:a.target.value}),required:!0,className:"admin-form-input"})}),e.jsx(c,{label:`Heslo ${o?"(ponechte prázdné pro zachování stávajícího)":""}`,children:e.jsx("input",{type:"password",value:s.password,onChange:a=>l({...s,password:a.target.value}),required:!o,className:"admin-form-input"})}),e.jsx(c,{label:"Role",children:e.jsx("select",{value:s.role_id,onChange:a=>l({...s,role_id:a.target.value}),required:!0,className:"admin-form-select",children:b.map(a=>e.jsx("option",{value:a.id,children:a.display_name},a.id))})}),e.jsxs("label",{className:"admin-form-checkbox",children:[e.jsx("input",{type:"checkbox",checked:s.is_active,onChange:a=>l({...s,is_active:a.target.checked})}),e.jsx("span",{children:"Účet je aktivní"})]})]})}),e.jsxs("div",{className:"admin-modal-footer",children:[e.jsx("button",{type:"button",onClick:y,className:"admin-btn admin-btn-secondary",children:"Zrušit"}),e.jsx("button",{type:"button",onClick:D,className:"admin-btn admin-btn-primary",children:o?"Uložit změny":"Vytvořit uživatele"})]})]})]})}),e.jsx(I,{isOpen:m.isOpen,onClose:_,onConfirm:F,title:"Smazat uživatele",message:`Opravdu chcete smazat uživatele "${m.user?.first_name} ${m.user?.last_name}"? Tato akce je nevratná.`,confirmText:"Smazat",cancelText:"Zrušit",type:"danger",loading:T})]})}export{se as default};