1import{r as h,j as e,y as v,aO as b,aa as L,b1 as q}from"./index-CzMEFmtw.js";import{P as A,a as D,C as N}from"./ui-BklIU2Vp.js";import{P as B}from"./plus-DZqQktxt.js";import{S as E}from"./save-Bu384Y2v.js";import{T as F}from"./trash-2-gzkfqCHP.js";import{G as R}from"./grip-vertical-BONnPuEz.js";const C=l=>l.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,80);function Q(){const[l,o]=h.useState([]),[u,g]=h.useState(!0),[x,r]=h.useState(null),[a,m]=h.useState("");async function i(){g(!0);const{data:t,error:n}=await v.from("job_positions").select("*").order("sort_order").order("created_at");n&&b.error(n.message),o(t??[]),g(!1)}h.useEffect(()=>{i()},[]);const s=l.find(t=>t.id===x)??null,f=h.useMemo(()=>{const t=a.toLowerCase().trim();return t?l.filter(n=>n.title.toLowerCase().includes(t)||(n.department??"").toLowerCase().includes(t)):l},[l,a]);async function w(){var y;const t="New position",{data:n,error:j}=await v.from("job_positions").insert({title:t,slug:`${C(t)}-${Math.random().toString(36).slice(2,6)}`,is_active:!1,sort_order:(((y=l[l.length-1])==null?void 0:y.sort_order)??0)+1}).select().single();if(j)return b.error(j.message);await i(),r(n.id)}async function k(t){const{error:n}=await v.from("job_positions").update({title:t.title,slug:t.slug,department:t.department,location:t.location,employment_type:t.employment_type,short_description:t.short_description,description:t.description,responsibilities:t.responsibilities,requirements:t.requirements,questions:t.questions,is_active:t.is_active,sort_order:t.sort_order}).eq("id",t.id);if(n)return b.error(n.message);b.success("Saved"),i()}async function S(t){if(!confirm(`Delete "${t.title}"? Applications will keep the position title but lose the link.`))return;const{error:n}=await v.from("job_positions").delete().eq("id",t.id);if(n)return b.error(n.message);r(null),i()}function p(t){s&&o(n=>n.map(j=>j.id===s.id?{...j,...t}:j))}return e.jsxs(A,{children:[e.jsx(D,{title:"Careers",description:"Manage open positions shown on the /careers page.",actions:e.jsxs("button",{onClick:w,className:"inline-flex items-center gap-1.5 h-9 px-3 rounded-lg bg-[#F9A01B] text-white text-sm font-semibold hover:bg-[#e88f0a]",children:[e.jsx(B,{className:"w-4 h-4"})," New position"]})}),e.jsxs("div",{className:"grid grid-cols-[300px_1fr] gap-4",children:[e.jsxs(N,{className:"p-3",children:[e.jsx("input",{placeholder:"Searchâ¦",value:a,onChange:t=>m(t.target.value),className:"w-full h-9 px-3 border border-gray-200 rounded-lg text-sm mb-2"}),e.jsxs("div",{className:"space-y-1 max-h-[70vh] overflow-y-auto",children:[u&&e.jsx("div",{className:"text-sm text-gray-500 p-2",children:"Loadingâ¦"}),!u&&f.length===0&&e.jsx("div",{className:"text-sm text-gray-500 p-2",children:"No positions yet."}),f.map(t=>e.jsxs("button",{onClick:()=>r(t.id),className:`w-full text-left px-3 py-2 rounded-lg text-sm ${x===t.id?"bg-[#F9A01B]/10 text-[#B26800]":"hover:bg-gray-50"}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"font-semibold text-gray-900 flex-1 truncate",children:t.title}),e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded-full ${t.is_active?"bg-green-100 text-green-700":"bg-gray-100 text-gray-500"}`,children:t.is_active?"Live":"Draft"})]}),e.jsxs("div",{className:"text-xs text-gray-500",children:[t.department??"â"," · ",t.location??"â"]})]},t.id))]})]}),e.jsx(N,{className:"p-5",children:s?e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-semibold text-gray-900",children:"Edit position"}),e.jsxs("div",{className:"text-xs text-gray-500",children:["Updated ",new Date(s.updated_at).toLocaleString()]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs text-gray-700 px-3 h-9 border border-gray-200 rounded-lg",children:[e.jsx("input",{type:"checkbox",checked:s.is_active,onChange:t=>p({is_active:t.target.checked})}),"Live on site"]}),e.jsxs("button",{onClick:()=>k(s),className:"inline-flex items-center gap-1.5 h-9 px-3 rounded-lg bg-[#F9A01B] text-white text-sm font-semibold hover:bg-[#e88f0a]",children:[e.jsx(E,{className:"w-4 h-4"})," Save"]}),e.jsxs("button",{onClick:()=>S(s),className:"inline-flex items-center gap-1.5 h-9 px-3 rounded-lg border border-red-200 text-red-600 text-sm hover:bg-red-50",children:[e.jsx(F,{className:"w-4 h-4"})," Delete"]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(d,{label:"Title",children:e.jsx("input",{value:s.title,onChange:t=>p({title:t.target.value}),className:c})}),e.jsx(d,{label:"Slug (URL id)",children:e.jsx("input",{value:s.slug,onChange:t=>p({slug:C(t.target.value)}),className:c})}),e.jsx(d,{label:"Department",children:e.jsx("input",{value:s.department??"",onChange:t=>p({department:t.target.value}),className:c})}),e.jsx(d,{label:"Location",children:e.jsx("input",{value:s.location??"",onChange:t=>p({location:t.target.value}),className:c})}),e.jsx(d,{label:"Employment type",children:e.jsx("input",{value:s.employment_type??"",onChange:t=>p({employment_type:t.target.value}),className:c,placeholder:"Full-time"})}),e.jsx(d,{label:"Sort order",children:e.jsx("input",{type:"number",value:s.sort_order,onChange:t=>p({sort_order:parseInt(t.target.value||"0")}),className:c})})]}),e.jsx(d,{label:"Short description (shown on card)",children:e.jsx("textarea",{rows:2,value:s.short_description??"",onChange:t=>p({short_description:t.target.value}),className:c})}),e.jsx(d,{label:"Full description (shown in apply dialog)",children:e.jsx("textarea",{rows:4,value:s.description??"",onChange:t=>p({description:t.target.value}),className:c})}),e.jsx(_,{label:"Responsibilities",items:s.responsibilities??[],onChange:t=>p({responsibilities:t})}),e.jsx(_,{label:"Requirements",items:s.requirements??[],onChange:t=>p({requirements:t})}),e.jsx($,{questions:s.questions??[],onChange:t=>p({questions:t})})]}):e.jsx("div",{className:"text-sm text-gray-500 text-center py-16",children:'Select a position on the left, or click "New position".'})})]})]})}const c="w-full h-10 px-3 border border-gray-200 rounded-lg text-sm";function d({label:l,children:o}){return e.jsxs("label",{className:"block mt-3",children:[e.jsx("span",{className:"block text-[11px] font-semibold uppercase tracking-wider text-gray-500 mb-1",children:l}),o]})}function _({label:l,items:o,onChange:u}){return e.jsxs("div",{className:"mt-4",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-gray-500 mb-1.5",children:l}),e.jsx("div",{className:"space-y-2",children:o.map((g,x)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:g,onChange:r=>u(o.map((a,m)=>m===x?r.target.value:a)),className:c}),e.jsx("button",{type:"button",onClick:()=>u(o.filter((r,a)=>a!==x)),className:"h-10 w-10 rounded-lg border border-gray-200 text-gray-500 hover:text-red-600",children:"Ã"})]},x))}),e.jsx("button",{type:"button",onClick:()=>u([...o??[],""]),className:"mt-2 text-xs font-semibold text-[#B26800] hover:underline",children:"+ Add item"})]})}function $({questions:l,onChange:o}){const[u,g]=h.useState(0);function x(r,a){o(l.map((m,i)=>i===r?{...m,...a}:m))}return e.jsxs("div",{className:"mt-6 border-t border-gray-100 pt-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-gray-500",children:"Application questions"}),e.jsx("button",{type:"button",onClick:()=>o([...l??[],{id:`q_${Math.random().toString(36).slice(2,7)}`,label:"New question",type:"text",required:!1}]),className:"text-xs font-semibold text-[#B26800] hover:underline",children:"+ Add question"})]}),e.jsx("div",{className:"space-y-2",children:l.map((r,a)=>{const m=u===a;return e.jsxs("div",{className:"border border-gray-200 rounded-lg",children:[e.jsxs("button",{type:"button",onClick:()=>g(m?null:a),className:"w-full flex items-center gap-2 px-3 py-2 text-left",children:[e.jsx(R,{size:14,className:"text-gray-400"}),m?e.jsx(L,{size:14}):e.jsx(q,{size:14}),e.jsx("span",{className:"text-sm font-medium text-gray-900 flex-1 truncate",children:r.label||"(untitled)"}),e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded-full bg-gray-100 text-gray-600",children:r.type}),r.required&&e.jsx("span",{className:"text-[10px] text-red-600",children:"req"})]}),m&&e.jsxs("div",{className:"p-3 border-t border-gray-100 grid grid-cols-2 gap-2",children:[e.jsx(d,{label:"Question label",children:e.jsx("input",{value:r.label,onChange:i=>x(a,{label:i.target.value}),className:c})}
1),e.jsx(d,{label:"Field id",children:e.jsx("input",{value:r.id,onChange:i=>x(a,{id:i.target.value.replace(/[^a-z0-9_]/gi,"_")}),className:c})}),e.jsx(d,{label:"Type",children:e.jsxs("select",{value:r.type,onChange:i=>x(a,{type:i.target.value}),className:c,children:[e.jsx("option",{value:"text",children:"Short text"}),e.jsx("option",{value:"textarea",children:"Long text"}),e.jsx("option",{value:"select",children:"Dropdown"}),e.jsx("option",{value:"yesno",children:"Yes / No"})]})}),e.jsx(d,{label:"Required?",children:e.jsxs("label",{className:"flex items-center gap-2 h-10",children:[e.jsx("input",{type:"checkbox",checked:r.required??!1,onChange:i=>x(a,{required:i.target.checked})}),e.jsx("span",{className:"text-sm text-gray-700",children:"Yes"})]})}),r.type==="select"&&e.jsx("div",{className:"col-span-2",children:e.jsx(d,{label:"Options (one per line)",children:e.jsx("textarea",{rows:3,value:(r.options??[]).join(` 2`),onChange:i=>x(a,{options:i.target.value.split(` 3`).map(s=>s.trim()).filter(Boolean)}),className:c})})}),e.jsx("div",{className:"col-span-2 flex justify-end",children:e.jsx("button",{type:"button",onClick:()=>o(l.filter((i,s)=>s!==a)),className:"text-xs text-red-600 hover:underline",children:"Delete question"})})]})]},a)})})]})}export{Q 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.