PageSourceSearch

https://hospitalityb2b.co.uk/assets/AdminAgenda-tCgnePF3.js

js hospitalityb2b.co.uk collected 2026-09-30 04:17:21 UTC 15,635 bytes, 4 lines download raw bytes

1import{j as e}from"./vendor-ui-Bwz2KwBC.js";import{f as ye,r as c,R as ve}from"./vendor-react-B-LUs8MM.js";import{a as _e,u as T,d as L}from"./vendor-data-D3rmSUoE.js";import{ar as fe,s as l,N as Ne,B as m,n as Se,ae as H,aH as B,a4 as U,aA as De,aB as be,aC as we,aD as Ce,aE as ke,aF as Te,a2 as u,I as x,aG as Fe,b0 as Ae,am as qe,z as Ee,aQ as V,aR as W,aS as G,aT as X,aU as $,aV as J,aW as Y,aX as Z,F as Ke}from"./index-Yxar46Qa.js";import{T as ee,a as se,b as w,c as d,d as te,e as o}from"./table-BMF9lmzg.js";import"./vendor-charts-C9IGNkSd.js";import"./vendor-editor-B92hpOiY.js";import"./vendor-dnd-BwFBceOp.js";const He=()=>{const{toast:j}=fe(),p=_e(),ie=ye(),[ae,N]=c.useState(!1),[S,M]=c.useState(null),[D,O]=c.useState(null),[F,b]=c.useState([]),[A,P]=c.useState(""),[ne,re]=c.useState(null),[le,Q]=c.useState(!1),[oe,q]=c.useState(!1),[de,E]=c.useState(!1),[C,g]=c.useState(null),[I,R]=c.useState(null),[i,r]=c.useState({title:"",description:"",session_date:"",start_time:"",end_time:"",venue:"",room:"",session_type:"",capacity:"",status:"draft"}),{data:y,isLoading:ce}=T({queryKey:["agenda-sessions"],queryFn:async()=>{const{data:s,error:t}=await l.from("agenda_sessions").select("*").order("session_date",{ascending:!0}).order("start_time",{ascending:!0});if(t)throw t;return s}}),{data:K,isLoading:me}=T({queryKey:["draft-sessions"],queryFn:async()=>{const{data:s,error:t}=await l.from("draft_sessions").select(`
2          *,
3          speaker:speakers(name, title, company)
4        `).order("created_at",{ascending:!1});if(t)throw t;return s}}),{data:v}=T({queryKey:["speakers"],queryFn:async()=>{const{data:s,error:t}=await l.from("speakers").select("*").order("name");if(t)throw t;return s}}),{data:_}=T({queryKey:["session-speakers"],queryFn:async()=>{const{data:s,error:t}=await l.from("session_speakers").select("*");if(t)throw t;return s}});ve.useEffect(()=>{const s=l.channel("admin-draft-sessions-changes").on("postgres_changes",{event:"*",schema:"public",table:"draft_sessions"},()=>{p.invalidateQueries({queryKey:["draft-sessions"]})}).subscribe();return()=>{l.removeChannel(s)}},[p]);const h=L({mutationFn:async()=>{if(D){const a={seminar_title:i.title,seminar_description:i.description||null,session_date:i.session_date||null,start_time:i.start_time||null,end_time:i.end_time||null,venue:i.venue||null,room:i.room||null,session_type:i.session_type||null,status:i.status},{error:n}=await l.from("draft_sessions").update(a).eq("id",D.id);if(n)throw n;return}const s={title:i.title,description:i.description||null,session_date:i.session_date,start_time:i.start_time,end_time:i.end_time,venue:i.venue,room:i.room||null,session_type:i.session_type||null,capacity:i.capacity?parseInt(i.capacity):null,status:i.status};let t;if(S){const{error:a}=await l.from("agenda_sessions").update(s).eq("id",S.id);if(a)throw a;t=S.id}else{const{data:a,error:n}=await l.from("agenda_sessions").insert(s).select().maybeSingle();if(n)throw n;if(!a)throw new Error("Failed to create session");if(t=a.id,I){const{error:k}=await l.from("draft_sessions").delete().eq("id",I);if(k)throw k}}if(await l.from("session_speakers").delete().eq("session_id",t),F.length>0){const a=F.map((k,ge)=>({session_id:t,speaker_id:k,speaker_order:ge})),{error:n}=await l.from("session_speakers").insert(a);if(n)throw n}},onSuccess:()=>{p.invalidateQueries({queryKey:["agenda-sessions"]}),p.invalidateQueries({queryKey:["session-speakers"]}),p.invalidateQueries({queryKey:["draft-sessions"]}),j({title:"Success",description:D?"Draft updated successfully":S?"Session updated successfully":"Session created successfully"}),z()},onError:s=>{j({title:"Error",description:s.message,variant:"destructive"})}}),ue=L({mutationFn:async s=>{const{error:t}=await l.from("agenda_sessions").delete().eq("id",s);if(t)throw t},onSuccess:()=>{p.invalidateQueries({queryKey:["agenda-sessions"]}),p.invalidateQueries({queryKey:["session-speakers"]}),j({title:"Success",description:"Session deleted successfully"}),q(!1),g(null)},onError:s=>{j({title:"Error",description:s.message,variant:"destructive"})}}),he=L({mutationFn:async s=>{const{error:t}=await l.from("draft_sessions").delete().eq("id",s);if(t)throw t},onSuccess:()=>{p.invalidateQueries({queryKey:["draft-sessions"]}),j({title:"Success",description:"Draft session deleted successfully"}),E(!1),g(null)},onError:s=>{j({title:"Error",description:s.message,variant:"destructive"})}}),xe=s=>{var a;
4M(s),r({title:s.title,description:s.description||"",session_date:s.session_date,start_time:s.start_time,end_time:s.end_time,venue:s.venue,room:s.room||"",session_type:s.session_type||"",capacity:((a=s.capacity)==null?void 0:a.toString())||"",status:s.status});const t=(_==null?void 0:_.filter(n=>n.session_id===s.id).map(n=>n.speaker_id))||[];b(t),N(!0)},z=()=>{N(!1),M(null),O(null),R(null),r({title:"",description:"",session_date:"",start_time:"",end_time:"",venue:"",room:"",session_type:"",capacity:"",status:"draft"}),b([]),P("")},pe=s=>{b(t=>t.includes(s)?t.filter(a=>a!==s):[...t,s])},je=s=>{const t=(_==null?void 0:_.filter(a=>a.session_id===s).sort((a,n)=>a.speaker_order-n.speaker_order).map(a=>a.speaker_id))||[];return(v==null?void 0:v.filter(a=>t.includes(a.id)))||[]},f=v==null?void 0:v.filter(s=>{var a,n;if(!A)return!0;const t=A.toLowerCase();return s.name.toLowerCase().includes(t)||((a=s.title)==null?void 0:a.toLowerCase().includes(t))||((n=s.company)==null?void 0:n.toLowerCase().includes(t))});return e.jsx(e.Fragment,{children:e.jsxs("div",{className:"min-h-screen flex flex-col",children:[e.jsx(Ne,{}),e.jsx("main",{className:"flex-1 pt-32",children:e.jsxs("div",{className:"container mx-auto py-8",children:[e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between items-center mb-6",children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Manage Agenda"}),e.jsxs(m,{variant:"outline",onClick:()=>ie("/admin"),children:[e.jsx(Se,{className:"mr-2 h-4 w-4"}),"Back to Admin"]})]}),K&&K.length>0&&e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Draft Sessions From Speaker Forms"}),e.jsx("div",{className:"border rounded-lg overflow-hidden",children:e.jsxs(ee,{children:[e.jsx(se,{children:e.jsxs(w,{children:[e.jsx(d,{children:"Speaker"}),e.jsx(d,{children:"Seminar Title"}),e.jsx(d,{children:"Status"}),e.jsx(d,{children:"Submitted"}),e.jsx(d,{className:"text-right",children:"Actions"})]})}),e.jsx(te,{children:K.map(s=>{var t,a,n;return e.jsxs(w,{children:[e.jsxs(o,{children:[e.jsx("div",{className:"font-medium",children:((t=s.speaker)==null?void 0:t.name)||"Unknown"}),((a=s.speaker)==null?void 0:a.title)&&((n=s.speaker)==null?void 0:n.company)&&e.jsxs("div",{className:"text-sm text-muted-foreground",children:[s.speaker.title,", ",s.speaker.company]})]}),e.jsxs(o,{children:[e.jsx("div",{className:"font-medium",children:s.seminar_title||"No title"}),s.seminar_description&&e.jsx("div",{className:"text-sm text-muted-foreground line-clamp-2 max-w-md",children:s.seminar_description})]}),e.jsx(o,{children:e.jsx("span",{className:"text-sm px-2 py-1 rounded bg-yellow-100 text-yellow-800",children:s.status||"Draft"})}),e.jsx(o,{className:"text-sm text-muted-foreground",children:s.created_at&&H(new Date(s.created_at),"MMM dd, yyyy")}),e.jsx(o,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(m,{variant:"outline",size:"sm",onClick:()=>{O(s),r({title:s.seminar_title||"",description:s.seminar_description||"",session_date:s.session_date||"",start_time:s.start_time||"",end_time:s.end_time||"",venue:s.venue||"",room:s.room||"",session_type:s.session_type||"",capacity:"",status:"draft"}),s.speaker_id&&b([s.speaker_id]),N(!0)},children:[e.jsx(B,{className:"mr-2 h-4 w-4"}),"Edit Draft"]}),e.jsx(m,{variant:"default",size:"sm",onClick:()=>{R(s.id),r({title:s.seminar_title||"",description:s.seminar_description||"",session_date:s.session_date||"",start_time:s.start_time||"",end_time:s.end_time||"",venue:s.venue||"",room:s.room||"",session_type:s.session_type||"",capacity:"",status:"draft"}),s.speaker_id&&b([s.speaker_id]),N(!0)},children:"Create Session"}),e.jsx(m,{variant:"ghost",size:"sm",onClick:()=>{g(s.id),E(!0)},children:e.jsx(U,{className:"h-4 w-4"})})]})})]},s.id)})})]})})]}),e.jsxs("div",{className:"flex justify-between items-center mb-4",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Published & Draft Sessions"}),e.jsxs(De,{open:ae,onOpenChange:N,children:[e.jsx(be,{asChild:!0,children:e.jsxs(m,{children:[e.jsx(we,{className:"mr-2 h-4 w-4"}),"Add Session"]})}),e.jsxs(Ce,{className:"max-w-2xl h-[90vh] overflow-y-auto",children:[e.jsx(ke,{children:e.jsx(Te,{children:D?"Edit Draft Session":S?"Edit Session":"Add New Session"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(u,{htmlFor:"title",children:"Session Title *"}),e.jsx(x,{id:"title",value:i.title,onChange:s=>r(t=>({...t,title:s.target.value})),placeholder:"Enter session title"})]}),e.jsxs("div",{children:[e.jsx(u,{htmlFor:"description",children:"Description"}),e.jsx(Fe,{id:"description",value:i.description,onChange:s=>r(t=>({...t,description:s.target.value})),placeholder:"Enter session description",rows:3})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(u,{htmlFor:"session_date",children:"Date *"}),e.jsx(x,{id:"session_date",type:"date",value:i.session_date,onChange:s=>r(t=>({...t,session_date:s.target.value}))})]}),e.jsxs("div",{children:[e.jsx(u,{htmlFor:"session_type",children:"Session Type"}
4),e.jsx(x,{id:"session_type",value:i.session_type,onChange:s=>r(t=>({...t,session_type:s.target.value})),placeholder:"e.g., Keynote, Workshop"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(u,{htmlFor:"start_time",children:"Start Time *"}),e.jsx(x,{id:"start_time",type:"time",value:i.start_time,onChange:s=>r(t=>({...t,start_time:s.target.value}))})]}),e.jsxs("div",{children:[e.jsx(u,{htmlFor:"end_time",children:"End Time *"}),e.jsx(x,{id:"end_time",type:"time",value:i.end_time,onChange:s=>r(t=>({...t,end_time:s.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(u,{htmlFor:"venue",children:"Venue *"}),e.jsx(x,{id:"venue",value:i.venue,onChange:s=>r(t=>({...t,venue:s.target.value})),placeholder:"e.g., Main Hall"})]}),e.jsxs("div",{children:[e.jsx(u,{htmlFor:"room",children:"Room"}),e.jsx(x,{id:"room",value:i.room,onChange:s=>r(t=>({...t,room:s.target.value})),placeholder:"e.g., Room 101"})]})]}),e.jsxs("div",{children:[e.jsx(u,{htmlFor:"capacity",children:"Capacity"}),e.jsx(x,{id:"capacity",type:"number",value:i.capacity,onChange:s=>r(t=>({...t,capacity:s.target.value})),placeholder:"Enter capacity"})]}),e.jsxs("div",{children:[e.jsxs(u,{className:"mb-2 block",children:[e.jsx(Ae,{className:"inline mr-2 h-4 w-4"}),"Assign Speakers"]}),e.jsx(x,{type:"text",placeholder:"Search speakers...",value:A,onChange:s=>P(s.target.value),className:"mb-2"}),e.jsx("div",{className:"border rounded-md p-4 max-h-48 overflow-y-auto space-y-2",children:(f==null?void 0:f.length)===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"No speakers found"}):f==null?void 0:f.map(s=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(qe,{id:s.id,checked:F.includes(s.id),onCheckedChange:()=>pe(s.id)}),e.jsxs("label",{htmlFor:s.id,className:"text-sm cursor-pointer flex-1",children:[s.name,s.title&&s.company&&e.jsxs("span",{className:"text-muted-foreground ml-2",children:["(",s.title,", ",s.company,")"]})]})]},s.id))})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(m,{variant:"outline",onClick:z,children:"Cancel"}),D?e.jsx(m,{onClick:()=>{r({...i,status:"draft"}),setTimeout(()=>h.mutate(),0)},disabled:!i.title||h.isPending,children:h.isPending?"Updating...":"Update Draft"}):e.jsxs(e.Fragment,{children:[e.jsx(m,{variant:"outline",onClick:()=>{r({...i,status:"draft"}),setTimeout(()=>h.mutate(),0)},disabled:!i.title||!i.session_date||!i.start_time||!i.end_time||!i.venue||h.isPending,children:h.isPending&&i.status==="draft"?"Saving...":"Save as Draft"}),e.jsx(m,{onClick:()=>{r({...i,status:"published"}),setTimeout(()=>h.mutate(),0)},disabled:!i.title||!i.session_date||!i.start_time||!i.end_time||!i.venue||h.isPending,children:h.isPending&&i.status==="published"?"Publishing...":"Save & Publish"})]})]})]})]})]})]})]}),ce||me?e.jsx("div",{className:"text-center py-8",children:"Loading sessions..."}):e.jsx("div",{className:"border rounded-lg",children:e.jsxs(ee,{children:[e.jsx(se,{children:e.jsxs(w,{children:[e.jsx(d,{children:"Date"}),e.jsx(d,{children:"Time"}),e.jsx(d,{children:"Title"}),e.jsx(d,{children:"Venue"}),e.jsx(d,{children:"Speakers"}),e.jsx(d,{children:"Type"}),e.jsx(d,{children:"Status"}),e.jsx(d,{className:"text-right",children:"Actions"})]})}),e.jsx(te,{children:(y==null?void 0:y.length)===0?e.jsx(w,{children:e.jsx(o,{colSpan:8,className:"text-center py-8 text-muted-foreground",children:'No sessions yet. Click "Add Session" to create one.'})}):y==null?void 0:y.map(s=>{const t=je(s.id);return e.jsxs(w,{children:[e.jsx(o,{className:"whitespace-nowrap",children:H(new Date(s.session_date),"MMM dd, yyyy")}),e.jsxs(o,{className:"whitespace-nowrap",children:[s.start_time.slice(0,5)," - ",s.end_time.slice(0,5)]}),e.jsxs(o,{children:[e.jsx("div",{className:"font-medium",children:s.title}),s.description&&e.jsx("div",{className:"text-sm text-muted-foreground line-clamp-1",children:s.description})]}),e.jsxs(o,{children:[e.jsx("div",{children:s.venue}),s.room&&e.jsx("div",{className:"text-sm text-muted-foreground",children:s.room})]}),e.jsx(o,{children:t.length>0?e.jsx("div",{className:"text-sm space-y-1",children:t.map(a=>e.jsx("button",{onClick:()=>{re(a),Q(!0)},className:"block text-left hover:text-primary hover:underline transition-colors",children:a.name},a.id))}):e.jsx("span",{className:"text-muted-foreground text-sm",children:"No speakers"})}),e.jsx(o,{children:s.session_type&&e.jsx("span",{className:"text-sm",children:s.session_type})}),e.jsx(o,{children:e.jsx("span",{className:`text-sm px-2 py-1 rounded ${s.status==="published"?"bg-green-100 text-green-800":"bg-gray-100 text-gray-800"}`,children:s.status==="published"?"Published":"Draft"})}),e.jsx(o,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(m,{variant:"ghost",size:"icon",onClick:()=>xe(s),children:e.jsx(B,{className:"h-4 w-4"})}),e.jsx(m,{variant:"ghost",size:"icon",onClick:()=>{g(s.id),q(!0)},children:e.jsx(U,{className:"h-4 w-4"})})]})})]},s.id)})})]})}),e.jsx(Ee,{speaker:ne,open:le,onOpenChange:Q}),e.jsx(V,{open:oe,onOpenChange:q,children:e.jsxs(W,{children:[e.jsxs(G,{children:[e.jsx(X,{children:"Delete Session"}),e.jsx($,{children:"Are you sure you want to delete this session? This action cannot be undone."})]}),e.jsxs(J,{children:[e.jsx(Y,{onClick:()=>g(null),children:"Cancel"}),e.jsx(Z,{onClick:()=>{C&&ue.mutate(C)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]})]})}),e.jsx(V,{open:de,onOpenChange:E,children:e.jsxs(W,{children:[e.jsxs(G,{children:[e.jsx(X,{children:"Delete Draft Session"}),e.jsx($,{children:"Are you sure you want to delete this draft session? This action cannot be undone."})]}),e.jsxs(J,{children:[e.jsx(Y,{onClick:()=>g(null),children:"Cancel"}),e.jsx(Z,{onClick:()=>{C&&he.mutate(C)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]})]})})]})}),e.jsx(Ke,{})]})})};export{He 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.