- pridano 20 utility trid (flex-1, mb-2, text-right, fw-500, admin-spinner-sm, atd.) - nahrazeno ~100 opakovanych inline stylu ve 39 JSX souborech - slouceno leave.css, orders.css, projects.css do admin.css (status badges) - bundle size: 228.91 -> 228.43 kB (-0.48 kB) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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-CIpK9ruO.js";import{F as ee}from"./Forbidden-D25jV3Oq.js";import"./vendor-utils-Dyr8OjFr.js";const u="/api/admin",se={aktivni:"Aktivní",dokonceny:"Dokončený",zruseny:"Zrušený"};function te(o){if(!o)return"";const t=new Date(o),y=t.getDate(),g=t.getMonth()+1,c=t.getFullYear(),h=String(t.getHours()).padStart(2,"0"),N=String(t.getMinutes()).padStart(2,"0");return`${y}. ${g}. ${c} ${h}:${N}`}function de(){const{id:o}=K(),t=Q(),{hasPermission:y,isAdmin:g}=V(),c=Y(),h=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,I]=i.useState(!0),[j,A]=i.useState(""),[E,L]=i.useState(!1),[S,T]=i.useState(null);i.useEffect(()=>{h.state?.created&&(t.success("Projekt byl vytvořen"),c(h.pathname,{replace:!0,state:{}}))},[h.state]);const W=async()=>{try{const s=await p(`${u}/projects.php?action=notes&id=${o}`);if(s.status===401)return;const n=await s.json();n.success&&b(n.data.notes||[])}catch{}finally{I(!1)}};if(i.useEffect(()=>{(async()=>{try{const n=await p(`${u}/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 t.error(r.error||"Nepodařilo se načíst projekt"),c("/projects")}catch{t.error("Chyba připojení"),c("/projects")}finally{M(!1)}})(),W()},[o,t,c]),!y("projects.view"))return e.jsx(ee,{});const v=(s,n)=>$(r=>({...r,[s]:n})),H=async()=>{if(!d.name.trim()){t.error("Název projektu je povinný");return}C(!0);try{const n=await(await p(`${u}/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?t.success(n.message||"Projekt byl aktualizován"):t.error(n.error||"Nepodařilo se uložit projekt")}catch{t.error("Chyba připojení")}finally{C(!1)}},U=async()=>{P(!0);try{const n=await(await p(`${u}/projects.php?id=${o}`,{method:"DELETE"})).json();n.success?(c("/projects"),setTimeout(()=>t.success("Projekt byl smazán"),300)):t.error(n.error||"Nepodařilo se smazat projekt")}catch{t.error("Chyba připojení")}finally{P(!1)}},F=async()=>{if(j.trim()){L(!0);try{const n=await(await p(`${u}/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(""),t.success("Poznámka byla přidána")):t.error(n.error||"Nepodařilo se přidat poznámku")}catch{t.error("Chyba připojení")}finally{L(!1)}}},q=async s=>{T(s);try{const r=await(await p(`${u}/projects.php?action=delete_note¬eId=${s}`,{method:"DELETE"})).json();r.success?(b(m=>m.filter(J=>J.id!==s)),t.success("Poznámka byla smazána")):t.error(r.error||"Nepodařilo se smazat poznámku")}catch{t.error("Chyba připojení")}finally{T(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",{className:"flex-row-gap",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(s=>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"})]},s))})}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2].map(s=>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"})]},s))})})]});if(!a)return null;const x=y("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]})})]}),x&&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 admin-spinner-sm"}),"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:s=>v("name",s.target.value),className:"admin-form-input",placeholder:"Název projektu",disabled:!x})})]}),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:s=>v("status",s.target.value),className:"admin-form-select",disabled:!x,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:s=>v("start_date",s),disabled:!x})}),e.jsx(l,{label:"Datum ukončení",children:e.jsx(B,{mode:"date",value:d.end_date,onChange:s=>v("end_date",s),disabled:!x})})]})]})]})}),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",{className:"mb-4",children:[e.jsx("textarea",{value:j,onChange:s=>A(s.target.value),className:"admin-form-input",rows:2,placeholder:"Napište poznámku...",style:{resize:"vertical",width:"100%"},onKeyDown:s=>{s.key==="Enter"&&s.ctrlKey&&j.trim()&&F()}}),e.jsx("div",{className:"mt-2",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 admin-spinner-sm"}):"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(s=>e.jsx("div",{className:"admin-skeleton-line",style:{height:"52px",borderRadius:"8px"}},s))}),!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(s=>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",{className:"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:s.user_name}),e.jsx("span",{style:{color:"var(--text-tertiary)",fontSize:"0.75rem"},children:te(s.created_at)})]}),e.jsx("div",{style:{whiteSpace:"pre-wrap",fontSize:"0.875rem",lineHeight:1.5},children:s.content})]}),g&&e.jsx("button",{onClick:()=>q(s.id),className:"admin-btn-icon",title:"Smazat poznámku",disabled:S===s.id,style:{flexShrink:0,opacity:S===s.id?.5:1},children:S===s.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"})]})})]})},s.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:["(",se[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};
|