2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
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-BBlIrj2z.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¬eId=${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};
|