PageSourceSearch

https://www.abbeytheatre.co.uk/assets/AdminCommunicationPreferences-DLC0vsgU.js

js abbeytheatre.co.uk collected 2026-10-02 21:28:14 UTC 6,119 bytes, 1 lines download raw bytes

1import{k as E,l as T,r as l,s as a,q as r,j as e,B as n,bL as z,a2 as I,D as L,w as M,x as B,y as U,v as w,I as H,bd as R,bp as W}from"./index-D6S94l3r.js";import{T as G}from"./textarea-zkxjn3Pk.js";import{P as J}from"./plus-BOxbBXe6.js";import{A as K,a as V}from"./arrow-up-D9qnRETv.js";import{P as X}from"./pencil-C_L5e1Pl.js";function te(){const{user:m,isAdmin:p,isMarketing:b,isTrustee:C,loading:f}=E(),x=p||b||C,_=T(),[o,Q]=l.useState([]),[k,D]=l.useState(!0),[A,j]=l.useState(!1),[h,v]=l.useState(null),[i,d]=l.useState({question_text:"",description:"",is_active:!0});l.useEffect(()=>{!f&&(!m||!x)&&_("/admin/login")},[m,x,f,_]),l.useEffect(()=>{m&&x&&u()},[m,x]);const u=async()=>{const{data:s,error:t}=await a.from("communication_preference_questions").select("*").order("display_order",{ascending:!0});t?(r.error("Failed to load questions"),console.error(t)):Q(s||[]),D(!1)},g=s=>{s?(v(s),d({question_text:s.question_text,description:s.description||"",is_active:s.is_active})):(v(null),d({question_text:"",description:"",is_active:!0})),j(!0)},N=()=>{j(!1),v(null),d({question_text:"",description:"",is_active:!0})},F=async()=>{if(!i.question_text.trim()){r.error("Question text is required");return}if(h){const{error:s}=await a.from("communication_preference_questions").update({question_text:i.question_text,description:i.description||null,is_active:i.is_active}).eq("id",h.id);s?(r.error("Failed to update question"),console.error(s)):(r.success("Question updated"),u(),N())}else{const s=o.length>0?Math.max(...o.map(c=>c.display_order)):-1,{error:t}=await a.from("communication_preference_questions").insert({question_text:i.question_text,description:i.description||null,is_active:i.is_active,display_order:s+1});t?(r.error("Failed to create question"),console.error(t)):(r.success("Question created"),u(),N())}},O=async s=>{if(!confirm("Are you sure you want to delete this question? All user responses will also be deleted."))return;const{error:t}=await a.from("communication_preference_questions").delete().eq("id",s);t?(r.error("Failed to delete question"),console.error(t)):(r.success("Question deleted"),u())},P=async(s,t)=>{if(t===0)return;const c=o[t-1],{error:y}=await a.from("communication_preference_questions").update({display_order:c.display_order}).eq("id",s.id),{error:q}=await a.from("communication_preference_questions").update({display_order:s.display_order}).eq("id",c.id);y||q?r.error("Failed to reorder questions"):u()},S=async(s,t)=>{if(t===o.length-1)return;const c=o[t+1],{error:y}=await a.from("communication_preference_questions").update({display_order:c.display_order}).eq("id",s.id),{error:q}=await a.from("communication_preference_questions").update({display_order:s.display_order}).eq("id",c.id);y||q?r.error("Failed to reorder questions"):u()};return f||!m||!x?null:e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx("header",{className:"border-b border-border",children:e.jsxs("div",{className:"container mx-auto px-4 py-4 flex justify-between items-center",children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:"Communication Preferences"}),e.jsx("div",{className:"flex gap-2",children:e.jsxs(n,{variant:"outline",onClick:()=>_("/admin"),children:[e.jsx(z,{className:"mr-2 h-4 w-4"}),"Back to Admin"]})})]})}),e.jsxs("main",{className:"container mx-auto px-4 py-8",children:[e.jsxs("div",{className:"flex justify-between items-center mb-8",children:[e.jsx("h2",{className:"text-3xl font-bold text-foreground",children:"Preference Questions"}),p&&e.jsxs(n,{onClick:()=>g(),children:[e.jsx(J,{className:"mr-2 h-4 w-4"}),"New Question"]})]}),k?e.jsx("p",{className:"text-muted-foreground",children:"Loading questions..."}):o.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("p",{className:"text-muted-foreground mb-4",children:"No questions yet"}),p&&e.jsx(n,{onClick:()=>g(),children:"Create your first question"})]}):e.jsx("div",{className:"grid gap-4",children:o.map((s,t)=>e.jsxs("div",{className:"border border-border rounded-lg p-6 flex justify-between items-start",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("h3",{className:"text-xl font-bold text-foreground",children:s.question_text}),!s.is_active&&e.jsx("span",{className:"text-xs text-muted-foreground",children:"(Inactive)"})]}),s.description&&e.jsx("p",{className:"text-muted-foreground mb-2",children:s.description}),e.jsxs("div",{className:"text-sm text-muted-foreground",children:["Order: ",s.display_order]})]}),p&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx(n,{variant:"outline",size:"icon",onClick:()=>P(s,t),disabled:t===0,children:e.jsx(K,{className:"h-4 w-4"})}),e.jsx(n,{variant:"outline",size:"icon",onClick:()=>S(s,t),disabled:t===o.length-1,children:e.jsx(V,{className:"h-4 w-4"})}),e.jsx(n,{variant:"outline",size:"icon",onClick:()=>g(s),children:e.jsx(X,{className:"h-4 w-4"})}),e.jsx(n,{variant:"outline",size:"icon",onClick:()=>O(s.id),children:e.jsx(I,{className:"h-4 w-4"})})]})]},s.id))})]}),e.jsx(L,{open:A,onOpenChange:j,children:e.jsxs(M,{children:[e.jsx(B,{children:e.jsx(U,{children:h?"Edit Question":"New Question"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(w,{htmlFor:"question_text",children:"Question Text *"}),e.jsx(H,{id:"question_text",value:i.question_text,onChange:s=>d({...i,question_text:s.target.value}),placeholder:"e.g., Would you like to receive email updates?"})]}),e.jsxs("div",{children:[e.jsx(w,{htmlFor:"description",children:"Description (Optional)"}),e.jsx(G,{id:"description",value:i.description,onChange:s=>d({...i,description:s.target.value}),placeholder:"Additional context for the question",rows:3})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(R,{id:"is_active",checked:i.is_active,onCheckedChange:s=>d({...i,is_active:s})}),e.jsx(w,{htmlFor:"is_active",children:"Active"})]})]}),e.jsxs(W,{children:[e.jsx(n,{variant:"outline",onClick:N,children:"Cancel"}),e.jsx(n,{onClick:F,children:h?"Update":"Create"})]})]})})]})}export{te 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.