1import{e as ve,f as be,R as l,g as O,j as e,C as le,i as ae,k as re,I as f,h as ne,B as S,P as je}from"./index-Bep90cXs.js";import{T as ye,a as Ne,b as L,c as g,d as Se,e as x}from"./table-Cr5-c6AL.js";import{P as C}from"./printTemplateSlots.api-CJYLaF6o.js";import{P as Ce}from"./printTemplates.api-CfvWDWwr.js";import"./jspdf-vendor-_9OnqGYv.js";const oe={documentType:"",slot:"",templateId:"",active:"all"},w={documentType:"OFFER",slot:"",templateId:"",sortOrder:"1",repeatMode:"single",active:!0};function Oe(){const{setHeader:H,setActions:z,clear:_}=ve(),{hasPermission:q}=be(),[T,ie]=l.useState([]),[k,$]=l.useState([]),[K,de]=l.useState(0),[U,Q]=l.useState(!0),[E,G]=l.useState(null),[v,D]=l.useState(1),[A]=l.useState(20),[p,ce]=l.useState(oe),[m,me]=l.useState(oe),[a,I]=l.useState(null),[b,j]=l.useState(!1),[d,J]=l.useState(!1),[r,u]=l.useState(w),[i,F]=l.useState(!1),[V,n]=l.useState(null),[W,P]=l.useState(!1),[ue,X]=l.useState(0),xe=l.useMemo(()=>k.reduce((t,s)=>(t[s.id]=s,t),{}),[k]),o=l.useMemo(()=>T.find(t=>t.id===a)??null,[T,a]),Y=l.useCallback(()=>{I(null),j(!0),u(w),n(null)},[]);l.useEffect(()=>(H("Print template slots"),z([...q("printtemplateslots.write")?[{label:"New slot",variant:"primary",onClick:Y}]:[],{label:"Templates",variant:"outline",to:"/print-templates"}]),()=>_()),[H,z,_,Y,q]),l.useEffect(()=>{let t=!0;return Ce.list({page:1,pageSize:200}).then(s=>{t&&$(s.items)}).catch(()=>{t&&$([])}),()=>{t=!1}},[]),l.useEffect(()=>{const t=new AbortController;return Q(!0),G(null),C.list({page:v,pageSize:A,documentType:m.documentType.trim()||void 0,slot:m.slot.trim()||void 0,templateId:m.templateId?Number(m.templateId):void 0,active:m.active==="all"?void 0:m.active==="active",sortBy:"sortOrder",sortDirection:"asc",signal:t.signal}).then(s=>{ie(s.items),de(s.totalCount)}).catch(s=>{t.signal.aborted||G(O(s))}).finally(()=>Q(!1)),()=>t.abort()},[v,A,m,ue]),l.useEffect(()=>{const s=setTimeout(()=>{D(1),me(p)},350);return()=>clearTimeout(s)},[p]),l.useEffect(()=>{if(!a)return;const t=new AbortController;return J(!0),n(null),C.getById(a).then(s=>{j(!1),u({documentType:s.documentType??"",slot:s.slot??"",templateId:String(s.templateId??""),sortOrder:String(s.sortOrder??0),repeatMode:s.repeatMode??"single",active:s.active??!0})}).catch(s=>{t.signal.aborted||n(O(s))}).finally(()=>J(!1)),()=>t.abort()},[a]);const Z=l.useMemo(()=>[...T].sort((t,s)=>(t.sortOrder??0)-(s.sortOrder??0)),[T]),R=Math.max(1,Math.ceil(K/A)),M=t=>{const{name:s,value:c}=t.target;ce(h=>({...h,[s]:c}))},y=t=>{const{name:s,value:c}=t.target;u(h=>({...h,[s]:c}))},pe=t=>{u(s=>({...s,active:t.target.checked}))},he=()=>{const t=Number(r.sortOrder);return Number.isFinite(t)?Math.floor(t):null},fe=async t=>{t.preventDefault(),n(null);const s=r.documentType.trim(),c=r.slot.trim(),h=Number(r.templateId),ee=he(),te=r.repeatMode.trim();if(!s||!c||!te){n("Document type, slot, and repeat mode are required.");return}if(!Number.isFinite(h)){n("Template is required.");return}if(ee==null){n("Sort order must be a valid number.");return}const se={documentType:s,slot:c,templateId:h,sortOrder:ee,repeatMode:te,active:r.active};F(!0);try{if(b){const N=await C.create(se);I(N.id),j(!1)}else a&&await C.update(a,{id:a,...se});X(N=>N+1)}catch(N){n(O(N))}finally{F(!1)}},ge=async()=>{if(a){F(!0),n(null);try{await C.remove(a),I(null),j(!1),u(w),X(t=>t+1)}catch(t){n(O(t))}finally{F(!1),P(!1)}}},B="h-9 rounded-md border border-input dark:border-slate-700 bg-background dark:bg-slate-900 text-sm text-foreground dark:text-slate-100 px-2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring dark:focus-visible:ring-indigo-400";return e.jsxs("div",{className:"p-3 md:p-6 space-y-6",children:[e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[minmax(0,1.1fr)_minmax(0,1fr)]",children:[e.jsxs(le,{className:"rounded-2xl",children:[e.jsxs(ae,{className:"pb-3 flex flex-col gap-3 md:flex-row md:items-end md:justify-between",children:[e.jsxs("div",{children:[e.jsx(re,{className:"text-base",children:"Slots"}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[K," total"]})]}),e.jsxs("div",{className:"flex flex-wrap gap-3 items-end",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs mb-1 text-muted-foreground",htmlFor:"slot-documentType",children:"Document type"}),e.jsx(f,{id:"slot-documentType",name:"documentType",value:p.documentType,onCh
1ange:M,className:"w-36",placeholder:"OFFER"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs mb-1 text-muted-foreground",htmlFor:"slot-slot",children:"Slot"}),e.jsx(f,{id:"slot-slot",name:"slot",value:p.slot,onChange:M,className:"w-36",placeholder:"cover"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs mb-1 text-muted-foreground",htmlFor:"slot-templateId",children:"Template"}),e.jsxs("select",{id:"slot-templateId",name:"templateId",value:p.templateId,onChange:M,className:B,children:[e.jsx("option",{value:"",children:"All templates"}),k.map(t=>e.jsxs("option",{value:String(t.id),children:[t.code," · ",t.name]},t.id))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs mb-1 text-muted-foreground",htmlFor:"slot-active",children:"Status"}),e.jsxs("select",{id:"slot-active",name:"active",value:p.active,onChange:M,className:B,children:[e.jsx("option",{value:"all",children:"All"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"inactive",children:"Inactive"})]})]})]})]}),e.jsxs(ne,{children:[U&&e.jsx("div",{className:"p-6 text-sm opacity-70",children:"Loadingâ¦"}),E&&e.jsxs("div",{className:"p-6 text-sm text-destructive",children:["Error: ",E]}),!U&&!E&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center justify-between py-2 text-sm text-muted-foreground",children:[e.jsxs("span",{children:["Page ",v," of ",R]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(S,{variant:"outline",size:"sm",disabled:v<=1,onClick:()=>D(t=>Math.max(1,t-1)),children:"Prev"}),e.jsx(S,{variant:"outline",size:"sm",disabled:v>=R,onClick:()=>D(t=>Math.min(R,t+1)),children:"Next"})]})]}),e.jsxs(ye,{children:[e.jsx(Ne,{children:e.jsxs(L,{children:[e.jsx(g,{children:"Sort"}),e.jsx(g,{children:"Document"}),e.jsx(g,{children:"Slot"}),e.jsx(g,{children:"Template"}),e.jsx(g,{children:"Repeat"}),e.jsx(g,{children:"Status"})]})}),e.jsxs(Se,{children:[Z.length===0&&e.jsx(L,{children:e.jsx(x,{colSpan:6,className:"text-center py-8 text-sm text-muted-foreground",children:"No results"})}),Z.map(t=>{const s=t.id===a,c=t.templateName||t.templateCode||xe[t.templateId]?.code||`#${t.templateId}`;return e.jsxs(L,{className:`cursor-pointer hover:bg-neutral-50 dark:hover:bg-neutral-800/60 ${s?"bg-sky-50/60 dark:bg-slate-800/70":""}`,onClick:()=>{I(t.id),j(!1)},children:[e.jsx(x,{className:"font-medium",children:t.sortOrder}),e.jsx(x,{children:t.documentType}),e.jsx(x,{children:t.slot}),e.jsx(x,{children:c}),e.jsx(x,{children:t.repeatMode}),e.jsx(x,{children:t.active?"Active":"Inactive"})]},t.id)})]})]})]})]})]}),e.jsxs(le,{className:"rounded-2xl",children:[e.jsxs(ae,{className:"pb-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(re,{className:"text-base",children:b?"New slot":o?`Edit ${o.slot}`:"Slot editor"}),a&&e.jsx(S,{variant:"outline",size:"sm",onClick:()=>P(!0),disabled:i,children:"Delete"})]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:'Slots with repeat mode "per_sail" are repeated for each sail in the offer.'})]}),e.jsxs(ne,{children:[!b&&!o&&e.jsx("div",{className:"py-10 text-sm text-muted-foreground text-center",children:'Select a slot from the list or click "New slot" to start.'}),(b||o)&&e.jsxs("form",{className:"space-y-4",onSubmit:fe,children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"slot-documentType-input",children:"Document type"}),e.jsx(f,{id:"slot-documentType-input",name:"documentType",value:r.documentType,onChange:y,disabled:i||d})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"slot-slot-input",children:"Slot"}),e.jsx(f,{id:"slot-slot-input",name:"slot",value:r.slot,onChange:y,disabled:i||d})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"slot-template-input",children:"Template"}),e.jsxs("select",{id:"slot-template-input",name:"templateId",value:r.templateId,onChange:y,className:B,disabled:i||d,children:[e.jsx("option",{value:"",children:"Select template"}),k.map(t=>e.jsxs("option",{value:String(t.id),children:[t.code," · ",t.name]},t.id))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"slot-sortOrder",children:"Sort order"}),e.jsx(f,{id:"slot-sortOrder",name:"sortOrder",type:"number",min:0,value:r.sortOrder,onChange:y,disabled:i||d})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted-foreground mb-1",htmlFor:"slot-repeatMode",children:"Repeat mode"}),e.jsx(f,{id:"slot-repeatMode",name:"repeatMode",value:r.repeatMode,onChange:y,disabled:i||d,placeholder:"single or per_sail"})]}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground md:col-span-2",children:[e.jsx("input",{type:"checkbox",className:"h-4 w-4 roun
1ded border-input",checked:r.active,onChange:pe,disabled:i||d}),"Active"]})]}),V&&e.jsx("div",{className:"text-sm text-destructive",children:V}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(S,{type:"submit",variant:"success",disabled:i||d,children:b?"Create slot":"Save changes"}),e.jsx(S,{type:"button",variant:"outline",disabled:i||d,onClick:()=>{o?(u({documentType:o.documentType??"",slot:o.slot??"",templateId:String(o.templateId??""),sortOrder:String(o.sortOrder??0),repeatMode:o.repeatMode??"single",active:o.active??!0}),n(null)):(u(w),n(null))},children:"Reset"})]})]})]})]})]}),W&&e.jsx(je,{open:W,title:"Delete print slot",description:"This action is irreversible. Are you sure you want to delete this slot?",confirmLabel:"Delete",cancelLabel:"Cancel",confirmIntent:"danger",onConfirm:ge,onCancel:()=>P(!1)})]})}export{Oe as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.