Files
app/dist/assets/ProjectDetail-QM0fWoAA.js
Simon f7466f0667 fix: mobilni responzivita tabulek AuditLog a Users
- admin-table-wrapper -> admin-table-responsive (konzistentni s Projects)
- pridany admin-card-body wrapper (padding 18px/12px)
- nova CSS trida admin-form-row-5 pro 5-sloupcove filtry s breakpointy
- odstranen ::after gradient overlay z admin-table-wrapper
- odstraneny inline styly (whiteSpace, gridTemplateColumns)

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

2 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{j as e,m as f}from"./vendor-animation-0s3FMHwK.js";import{h as K,g as Y,u as G,r as i,L as z}from"./vendor-react-BVs3cwbi.js";import{a as Q,u as V,F as l,A as B,C as X,c as p}from"./index-DR4BORa4.js";import{F as ee}from"./Forbidden-D25jV3Oq.js";import"./vendor-utils-Dyr8OjFr.js";const h="/api/admin",te={aktivni:"Aktivní",dokonceny:"Dokončený",zruseny:"Zrušený"};function se(o){if(!o)return"";const s=new Date(o),x=s.getDate(),g=s.getMonth()+1,c=s.getFullYear(),u=String(s.getHours()).padStart(2,"0"),N=String(s.getMinutes()).padStart(2,"0");return`${x}. ${g}. ${c} ${u}:${N}`}function de(){const{id:o}=K(),s=Q(),{hasPermission:x,isAdmin:g}=V(),c=Y(),u=G(),[N,M]=i.useState(!0),[_,C]=i.useState(!1),[a,O]=i.useState(null),[d,$]=i.useState({name:"",status:"aktivni",start_date:"",end_date:""}),[Z,D]=i.useState(!1),[R,P]=i.useState(!1),[k,b]=i.useState([]),[w,W]=i.useState(!0),[j,A]=i.useState(""),[E,T]=i.useState(!1),[S,L]=i.useState(null);i.useEffect(()=>{u.state?.created&&(s.success("Projekt byl vytvořen"),c(u.pathname,{replace:!0,state:{}}))},[u.state]);const I=async()=>{try{const t=await p(`${h}/projects.php?action=notes&id=${o}`);if(t.status===401)return;const n=await t.json();n.success&&b(n.data.notes||[])}catch{}finally{W(!1)}};if(i.useEffect(()=>{(async()=>{try{const n=await p(`${h}/projects.php?action=detail&id=${o}`);if(n.status===401)return;const r=await n.json();if(r.success){const m=r.data;O(m),$({name:m.name||"",status:m.status||"aktivni",start_date:(m.start_date||"").substring(0,10),end_date:(m.end_date||"").substring(0,10)})}else s.error(r.error||"Nepodařilo se načíst projekt"),c("/projects")}catch{s.error("Chyba připojení"),c("/projects")}finally{M(!1)}})(),I()},[o,s,c]),!x("projects.view"))return e.jsx(ee,{});const v=(t,n)=>$(r=>({...r,[t]:n})),H=async()=>{if(!d.name.trim()){s.error("Název projektu je povinný");return}C(!0);try{const n=await(await p(`${h}/projects.php?id=${o}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:d.name,status:d.status,start_date:d.start_date||null,end_date:d.end_date||null})})).json();n.success?s.success(n.message||"Projekt byl aktualizován"):s.error(n.error||"Nepodařilo se uložit projekt")}catch{s.error("Chyba připojení")}finally{C(!1)}},U=async()=>{P(!0);try{const n=await(await p(`${h}/projects.php?id=${o}`,{method:"DELETE"})).json();n.success?(c("/projects"),setTimeout(()=>s.success("Projekt byl smazán"),300)):s.error(n.error||"Nepodařilo se smazat projekt")}catch{s.error("Chyba připojení")}finally{P(!1)}},F=async()=>{if(j.trim()){T(!0);try{const n=await(await p(`${h}/projects.php?action=add_note&id=${o}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:j.trim()})})).json();n.success?(b(r=>[n.data.note,...r]),A(""),s.success("Poznámka byla přidána")):s.error(n.error||"Nepodařilo se přidat poznámku")}catch{s.error("Chyba připojení")}finally{T(!1)}}},q=async t=>{L(t);try{const r=await(await p(`${h}/projects.php?action=delete_note&noteId=${t}`,{method:"DELETE"})).json();r.success?(b(m=>m.filter(J=>J.id!==t)),s.success("Poznámka byla smazána")):s.error(r.error||"Nepodařilo se smazat poznámku")}catch{s.error("Chyba připojení")}finally{L(null)}};if(N)return 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",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[e.jsx("div",{className:"admin-skeleton-line",style:{width:"32px",height:"32px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"200px"}})]}),e.jsxs("div",{className:"admin-skeleton-row",style:{gap:"0.5rem"},children:[e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"100px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"100px",borderRadius:"8px"}})]})]}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2,3].map(t=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line w-1/4"}),e.jsx("div",{className:"admin-skeleton-line w-1/2"})]},t))})}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2].map(t=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line w-full"})]},t))})})]});if(!a)return null;const y=x("projects.edit");return e.jsxs("div",{children:[e.jsxs(f.div,{className:"admin-page-header",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:[e.jsx(z,{to:"/projects",className:"admin-btn-icon",title:"Zpět","aria-label":"Zpět",children:e.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M19 12H5M12 19l-7-7 7-7"})})}),e.jsx("div",{children:e.jsxs("h1",{className:"admin-page-title",children:["Projekt ",a.project_number]})})]}),y&&e.jsxs("div",{className:"admin-page-actions",children:[e.jsx("button",{onClick:H,className:"admin-btn admin-btn-primary",disabled:_,children:_?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"admin-spinner",style:{width:16,height:16,borderWidth:2}}),"Ukládání..."]}):"Uložit"}),!a.order_id&&e.jsx("button",{onClick:()=>D(!0),className:"admin-btn admin-btn-primary",children:"Smazat"})]})]}),e.jsx(f.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Základní údaje"}),e.jsxs("div",{className:"admin-form",children:[e.jsxs("div",{className:"admin-form-row",children:[e.jsx(l,{label:"Číslo projektu",children:e.jsx("input",{type:"text",value:a.project_number,className:"admin-form-input",readOnly:!0,style:{backgroundColor:"var(--bg-secondary)",cursor:"default"}})}),e.jsx(l,{label:"Název",children:e.jsx("input",{type:"text",value:d.name,onChange:t=>v("name",t.target.value),className:"admin-form-input",placeholder:"Název projektu",disabled:!y})})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsx(l,{label:"Zákazník",children:e.jsx("input",{type:"text",value:a.customer_name||"—",className:"admin-form-input",readOnly:!0,style:{backgroundColor:"var(--bg-secondary)",cursor:"default"}})}),e.jsx(l,{label:"Stav",children:e.jsxs("select",{value:d.status,onChange:t=>v("status",t.target.value),className:"admin-form-select",disabled:!y,children:[e.jsx("option",{value:"aktivni",children:"Aktivní"}),e.jsx("option",{value:"dokonceny",children:"Dokončený"}),e.jsx("option",{value:"zruseny",children:"Zrušený"})]})})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsx(l,{label:"Datum zahájení",children:e.jsx(B,{mode:"date",value:d.start_date,onChange:t=>v("start_date",t),disabled:!y})}),e.jsx(l,{label:"Datum ukončení",children:e.jsx(B,{mode:"date",value:d.end_date,onChange:t=>v("end_date",t),disabled:!y})})]})]})]})}),e.jsx(f.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.15},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Poznámky"}),e.jsxs("div",{style:{marginBottom:"1rem"},children:[e.jsx("textarea",{value:j,onChange:t=>A(t.target.value),className:"admin-form-input",rows:2,placeholder:"Napište poznámku...",style:{resize:"vertical",width:"100%"},onKeyDown:t=>{t.key==="Enter"&&t.ctrlKey&&j.trim()&&F()}}),e.jsx("div",{style:{marginTop:"0.5rem"},children:e.jsx("button",{onClick:F,className:"admin-btn admin-btn-secondary admin-btn-sm",disabled:E||!j.trim(),children:E?e.jsx("div",{className:"admin-spinner",style:{width:16,height:16,borderWidth:2}}):"Přidat poznámku"})})]}),a.notes&&e.jsxs("div",{style:{padding:"0.75rem",background:"var(--bg-secondary)",borderRadius:"0.5rem",marginBottom:"0.5rem",fontSize:"0.85rem",color:"var(--text-secondary)"},children:[e.jsx("div",{style:{fontSize:"0.75rem",color:"var(--text-tertiary)",marginBottom:"0.25rem"},children:"Starší poznámka (před zavedením systému)"}),e.jsx("div",{style:{whiteSpace:"pre-wrap"},children:a.notes})]}),w&&e.jsx("div",{className:"admin-skeleton",style:{gap:"0.75rem"},children:[0,1,2].map(t=>e.jsx("div",{className:"admin-skeleton-line",style:{height:"52px",borderRadius:"8px"}},t))}),!w&&k.length===0&&!a.notes&&e.jsx("div",{style:{color:"var(--text-tertiary)",fontSize:"0.875rem",textAlign:"center",padding:"1rem 0"},children:"Zatím žádné poznámky"}),!w&&(k.length>0||a.notes)&&e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:k.map(t=>e.jsx("div",{style:{padding:"0.75rem",background:"var(--bg-secondary)",borderRadius:"0.5rem",position:"relative"},children:e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"0.5rem"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"0.25rem"},children:[e.jsx("span",{style:{fontWeight:600,fontSize:"0.85rem"},children:t.user_name}),e.jsx("span",{style:{color:"var(--text-tertiary)",fontSize:"0.75rem"},children:se(t.created_at)})]}),e.jsx("div",{style:{whiteSpace:"pre-wrap",fontSize:"0.875rem",lineHeight:1.5},children:t.content})]}),g&&e.jsx("button",{onClick:()=>q(t.id),className:"admin-btn-icon",title:"Smazat poznámku",disabled:S===t.id,style:{flexShrink:0,opacity:S===t.id?.5:1},children:S===t.id?e.jsx("div",{className:"admin-spinner",style:{width:14,height:14,borderWidth:2}}):e.jsxs("svg",{width:"16",height:"16",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 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),e.jsx("path",{d:"M10 11v6M14 11v6"})]})})]})},t.id))})]})}),e.jsx(f.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.2},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Propojení"}),e.jsxs("div",{className:"admin-form-row",children:[e.jsx(l,{label:"Objednávka",children:e.jsx("div",{children:a.order_id?e.jsxs(z,{to:`/orders/${a.order_id}`,className:"link-accent",children:[a.order_number,a.order_status&&e.jsxs("span",{className:"text-tertiary",style:{fontWeight:400,marginLeft:"0.5rem"},children:["(",te[a.order_status]||a.order_status,")"]})]}):"—"})}),e.jsx(l,{label:"Nabídka",children:e.jsx("div",{children:a.quotation_id?e.jsx(z,{to:`/offers/${a.quotation_id}`,className:"link-accent",children:a.quotation_number}):"—"})})]})]})}),e.jsx(X,{isOpen:Z,onClose:()=>D(!1),onConfirm:U,title:"Smazat projekt",message:`Opravdu chcete smazat projekt "${a.project_number} ${a.name}"? Tato akce je nevratná.`,confirmText:"Smazat",cancelText:"Zrušit",type:"danger",loading:R})]})}export{de as default};