PageSourceSearch

https://delphigrc.org/assets/AdminEvents-CtVAoSrF.js

js delphigrc.org collected 2026-09-25 20:49:01 UTC 32,925 bytes, 1 lines download raw bytes

1import{r as e,j as t,L as s}from"./vendor-react-BH6F5oQJ.js";import{s as a,a7 as i,f as r,w as l,a8 as n,a9 as d,aa as o,H as c,C as m,M as u,N as p,m as x,G as h,S as v,t as g,ab as _,ac as j,ad as f}from"./index-C_oSc_qP.js";import{A as y,S as b}from"./AdminLayout-DnnQLcVN.js";import{L as N}from"./label-s7VY6HWn.js";import{T as w}from"./textarea-BWP5M5Bk.js";import{S as k}from"./switch-DwTQPZ7F.js";import{D as C,f as E,a as F,b as S,c as A,d as $}from"./dialog-D-Ed7GOQ.js";import{b as T,e as z,T as D,a as P,c as U,d as L}from"./table-BexhSyg2.js";import{u as M}from"./useActivityLogger-C6jwQw68.js";import{u as R}from"./useAdminActivityNotifications-COZyAecB.js";import{u as V,a as q}from"./vendor-query-CC4VRGyP.js";import{a as G,L as I,ab as Y,E as O,Z as B,aa as K,F as Q,an as W,X as J,s as H}from"./vendor-icons-CaI5__By.js";import{a as X,b as Z,s as ee,c as te}from"./useEventsHero-BWH5HzKL.js";import{u as se}from"./useFellows-DMaMaGGo.js";import{C as ae}from"./checkbox-BMU5ZBBh.js";import{A as ie,a as re,b as le,c as ne,d as de,e as oe,f as ce,g as me}from"./alert-dialog-CVco_Hni.js";import"./vendor-ui-B4WC06Sp.js";import"./vendor-supabase-COwyE4EW.js";import"./separator-Cc2qsRsv.js";import"./index-CCdGLatk.js";import"./Combination-DzDAyqvK.js";import"./index-B3FPD4RS.js";import"./en-US-DUAJ-5Wt.js";async function ue(e){const{data:t,error:s}=await a.from("events").select("*, event_speakers(fellow_id, fellows(id, name, title, slug, avatar_url)), event_moderators(fellow_id, fellows(id, name, title, slug, avatar_url)), event_publications(article_id, articles(id, title, slug))").eq("id",e).maybeSingle();if(s)throw s;return t?i({...t}):null}function pe(t){const s=t.pageSize??25,i=V(),{data:r,isLoading:l,isFetching:n,isError:d,error:o,refetch:c}=q({queryKey:["admin-events-list",t.page,s,t.search],queryFn:()=>async function({page:e,pageSize:t,search:s}){const i=(e-1)*t,r=i+t-1;let l=a.from("events").select("id,title,slug,event_date,end_date,event_time,end_time,location,link_url,program_file_url,youtube_url,image_url,display_order,is_active,is_featured,is_past_manual,agenda_enabled,agenda_timezone,created_at,updated_at",{count:"exact"}).order("event_date",{ascending:!1,nullsFirst:!1}).order("display_order",{ascending:!0}).range(i,r);const n=s.trim();if(n){const e=`%${d=n,d.replace(/[%_\\,]/g,e=>`\\${e}`)}%`;l=l.or(`title.ilike.${e},slug.ilike.${e},location.ilike.${e}`)}var d;const{data:o,error:c,count:m}=await l;if(c)throw c;return{events:o??[],totalCount:m??0}}({page:t.page,pageSize:s,search:t.search}),placeholderData:e=>e,staleTime:3e4}),m=(null==r?void 0:r.events)??[],u=(null==r?void 0:r.totalCount)??0,p=e.useCallback(()=>{i.invalidateQueries({queryKey:["admin-events-list"]})},[i]);return e.useEffect(()=>{const e=a.channel("admin-events-changes").on("postgres_changes",{event:"*",schema:"public",table:"events"},()=>{p()}).subscribe();return()=>{a.removeChannel(e)}},[p]),{events:m,totalCount:u,pageSize:s,loading:l,isFetching:n,isError:d,error:o,refetch:c,invalidateList:p,fetchEventById:ue}}const xe=e=>e?new Date(e).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"}):"—",he=e=>e?String(e).slice(0,5):"",ve=e.memo(function({event:e,onEdit:a,onDelete:i,onToggleActive:l,isTogglingActive:n=!1}){const d=(e=>{const t=he(e.event_time),s=he(e.end_time),a=!(!t&&!s),i=e.event_date||e.end_date;if(!i&&!a)return"—";if(!i&&a){const e=[t,s].filter(Boolean);return e.length?`${e.join(" – ")} ET`:"—"}const r=e.event_date||e.end_date;let l=xe(r);return t&&(l+=` ${t}`),e.end_date&&e.end_date!==r?(l+=` – ${xe(e.end_date)}`,s&&(l+=` ${s}`)):s&&s!==t&&(l+=` – ${s}`),a?`${l} ET`:l})(e);return t.jsxs(T,{children:[t.jsx(z,{className:"font-medium",children:t.jsxs("div",{className:"flex items-center space-x-3",children:[e.image_url&&t.jsx("img",{src:e.image_url,alt:"",className:"h-10 w-16 object-cover rounded"}),t.jsx("span",{children:e.title})]})}),t.jsx(z,{children:t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(G,{className:"h-3.5 w-3.5 text-muted-foreground"}),d]})}),t.jsx(z,{className:"max-w-[180px] truncate",children:e.location||"—"}),t.jsx(z,{children:e.display_order}),t.jsx(z,{children:t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.is_featured&&t.jsx("span",{className:"inline-flex rounded-full px-2 py-0.5 text-xs font-medium bg-primary/20 text-primary",children:"Featured"}),t.jsx("span",{className:"inline-flex items-center rounded-full px-2 py-1 text-xs font-medium "+(e.is_active?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-muted text-muted-foreground"),children:e.is_active?"Active":"Inactive"}),t.jsx("span",{className:"inline-flex items-center rounded-full px-2 py-1 text-xs font-medium "+(e.is_past_manual?"bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400":"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"),children:e.is_past_manual?"Past list":"Upcoming list"}),t.jsx("div",{className:"flex items-center gap-2 pl-1",children:t.jsx(k,{checked:e.is_active,disabled:n,onCheckedChange:t=>l(e,t),"aria-label":e.is_active?"Deactivate event":"Activate event"})})]})}),t.jsx(z,{className:"text-right",children:t.jsxs("div",{className:"flex justify-end space-x-2",children:[t.jsx(r,{variant:"ghost",size:"sm",asChild:!0,title:"Edit program",children:t.jsx(s,{to:`/admin/events/${e.id}/agenda`,children:t.jsx(I,{className:"h-4 w-4"})})}),t.jsx(r,{variant:"ghost",size:"sm",onClick:()=>a(e),title:"Edit event",children:t.jsx(Y,{className:"h-4 w-4"})}),(e.program_file_url||e.link_url)&&t.jsx(r,{variant:"ghost",size:"sm",asChild:!0,children:e.program_file_url?t.jsx(s,{to:`/events/${e.slug||e.id}/program`,target:"_blank",rel:"noopener noreferrer",className:"text-primary",children:t.jsx(O,{className:"h-4 w-4"})}):t.jsx("a",{href:e.link_url,target:"_blank",rel:"noopener noreferrer",className:"text-primary",children:t.jsx(O,{className:"h-4 w-4"})})}),t.jsx(r,{variant:"ghost",size:"sm",onClick:()=>i(e),title:"Delete event",children:t.jsx(B,{className:"h-4 w-4 text-destructive"})})]})})]})}),ge=e=>e?String(e).slice(0,5):"",_e=()=>{var s,i;R();const{toast:G}
1=l(),Y=V(),[B,ue]=e.useState(!1),[xe,he]=e.useState(null),[_e,je]=e.useState(1),[fe,ye]=e.useState(""),be=e.useDeferredValue(fe),[Ne,we]=e.useState(null),[ke,Ce]=e.useState(!1),[Ee,Fe]=e.useState(null),[Se,Ae]=e.useState(!1),[$e,Te]=e.useState(null),[ze,De]=e.useState(!1),[Pe,Ue]=e.useState(null),[Le,Me]=e.useState({title:"",slug:"",description:"",event_date:"",event_time:"",end_date:"",end_time:"",location:"",link_url:"",program_file_url:"",youtube_url:"",image_url:"",display_order:0,is_active:!0,is_featured:!1,is_past_manual:!1,speaker_ids:[],moderator_ids:[],related_article_ids:[],agenda_enabled:!1,agenda_timezone:"America/New_York"});e.useEffect(()=>{je(1)},[be]);const{events:Re,totalCount:Ve,pageSize:qe,loading:Ge,isFetching:Ie,fetchEventById:Ye}=pe({page:_e,pageSize:25,search:be}),Oe=Math.max(1,Math.ceil(Ve/qe)),Be=0===Ve?0:(_e-1)*qe+1,Ke=Math.min(_e*qe,Ve),{fellows:Qe}=se(),{data:We=[]}=q({queryKey:["articles","published","list"],queryFn:async()=>{const{data:e,error:t}=await a.from("articles").select("id, title, slug").eq("status","published").order("published_at",{ascending:!1});if(t)throw t;return e??[]}}),Je=n(),He=d(),Xe=o(),{logActivity:Ze}=M(),{data:et=[]}=X(),tt=et[0],st=Z(),[at,it]=e.useState({title:"",youtube_url:"",description:"",is_active:!1,speaker_ids:[],moderator_ids:[]});e.useEffect(()=>{var e,t;tt&&it({title:tt.title||"View Our Events",youtube_url:tt.youtube_url||"",description:tt.description||"",is_active:tt.is_active,speaker_ids:(null==(e=tt.events_hero_speakers)?void 0:e.map(e=>e.fellow_id))??[],moderator_ids:(null==(t=tt.events_hero_moderators)?void 0:t.map(e=>e.fellow_id))??[]})},[tt]);const rt=e.useCallback(()=>{he(null),Me({title:"",slug:"",description:"",event_date:"",event_time:"",end_date:"",end_time:"",location:"",link_url:"",program_file_url:"",youtube_url:"",image_url:"",display_order:0,is_active:!0,is_featured:!1,is_past_manual:!1,speaker_ids:[],moderator_ids:[],related_article_ids:[],agenda_enabled:!1,agenda_timezone:"America/New_York"})},[]),lt=e.useCallback(e=>{var t,s,a;he(e),Me({title:e.title,slug:e.slug||"",description:e.description||"",event_date:e.event_date||"",event_time:ge(e.event_time),end_date:e.end_date||"",end_time:ge(e.end_time),location:e.location||"",link_url:e.link_url||"",program_file_url:e.program_file_url||"",youtube_url:e.youtube_url||"",image_url:e.image_url||"",display_order:e.display_order??0,is_active:e.is_active,is_featured:e.is_featured??!1,is_past_manual:e.is_past_manual??!1,speaker_ids:(null==(t=e.event_speakers)?void 0:t.map(e=>e.fellow_id))??[],moderator_ids:(null==(s=e.event_moderators)?void 0:s.map(e=>e.fellow_id))??[],related_article_ids:(null==(a=e.related_publications)?void 0:a.map(e=>e.article_id))??[],agenda_enabled:e.agenda_enabled??!1,agenda_timezone:e.agenda_timezone||"America/New_York"})},[]),nt=e.useCallback(async e=>{if(Te(null),Ue(null),ue(!0),e){Ce(!0);try{const t=await Ye(e.id);if(!t)return G({title:"Error",description:"Event not found",variant:"destructive"}),void ue(!1);lt(t)}catch(t){G({title:"Error",description:t instanceof Error?t.message:"Failed to load event",variant:"destructive"}),ue(!1)}finally{Ce(!1)}}else rt()},[lt,Ye,rt,G]),dt=e.useCallback(e=>{nt(e)},[nt]),ot=e.useCallback(e=>{we(e)},[]),ct=e.useCallback(async(e,t)=>{Fe(e.id);try{await He.mutateAsync({id:e.id,is_active:t}),await Ze({activityType:"other",entityType:"event",entityId:e.id,entityName:e.title,actionDescription:t?`Activated event: ${e.title}`:`Deactivated event: ${e.title}`,oldValues:{is_active:e.is_active},newValues:{is_active:t}})}catch(s){G({title:"Error",description:s instanceof Error?s.message:"Failed to update status",variant:"destructive"})}finally{Fe(null)}},[Ze,G,He]),mt=e.useCallback(async()=>{if(!Ne)return;const{id:e,title:t,event_date:s,is_active:a}=Ne;try{await Xe.mutateAsync(e),await Ze({activityType:"other",entityType:"event",entityId:e,entityName:t,actionDescription:`Deleted event: ${t}`,oldValues:{title:t,event_date:s,is_active:a}}),we(null)}catch(i){G({title:"Error",description:i instanceof Error?i.message:"Failed to delete event",variant:"destructive"})}},[Xe,Ze,Ne,G]);return t.jsxs(y,{children:[t.jsxs(c,{children:[t.jsx("meta",{name:"robots",content:"noindex,nofollow"}),t.jsx("title",{children:"Manage Events - Admin - Delphi Global Research Center"})]}),t.jsxs("div",{className:"p-8",children:[t.jsxs("div",{className:"mx-auto max-w-7xl space-y-8",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{children:[t.jsx("h1",{className:"text-3xl font-heading font-bold text-foreground",children:"Manage Events"}),t.jsx("p",{className:"text-muted-foreground",children:"Add and manage conferences, workshops, and public events"})]}),t.jsxs(C,{open:B,onOpenChange:ue,children:[t.jsx(E,{asChild:!0,children:t.jsxs(r,{onClick:()=>nt(),children:[t.jsx(K,{className:"mr-2 h-4 w-4"}),"Add Event"]})}),t.jsxs(F,{className:"max-w-5xl max-h-[95vh] overflow-y-auto",children:[t.jsxs(S,{children:[t.jsx(A,{children:ke?"Loading event…":xe?"Edit Event":"Add New Event"}),t.jsx($,{children:ke?"Fetching speakers, moderators, and related publications…":xe?"Update event information":"Fill in the event details"})]}),t.jsxs("form",{onSubmit:async e=>{var t;e.preventDefault();
1try{const e={title:Le.title,slug:Le.slug.trim()||null,description:Le.description||null,event_date:Le.event_date||null,end_date:Le.end_date||null,event_time:Le.event_time||null,end_time:Le.end_time||null,location:Le.location||null,link_url:Le.link_url||null,program_file_url:Le.program_file_url||null,youtube_url:Le.youtube_url||null,image_url:Le.image_url||null,display_order:Le.display_order,is_active:Le.is_active,is_featured:Le.is_featured,is_past_manual:Le.is_past_manual,agenda_enabled:Le.agenda_enabled,agenda_timezone:(null==(t=Le.agenda_timezone)?void 0:t.trim())||"America/New_York"};let s;if(xe)await He.mutateAsync({id:xe.id,...e}),s=xe.id,await Ze({activityType:"other",entityType:"event",entityId:xe.id,entityName:Le.title,actionDescription:`Updated event: ${Le.title}`,oldValues:{title:xe.title,event_date:xe.event_date,is_active:xe.is_active},newValues:{title:Le.title,event_date:Le.event_date,is_active:Le.is_active}});else{const t=await Je.mutateAsync(e);s=t&&"object"==typeof t&&"id"in t?t.id:"",s&&await Ze({activityType:"other",entityType:"event",entityId:s,entityName:Le.title,actionDescription:`Created event: ${Le.title}`,newValues:{title:Le.title,event_date:Le.event_date,is_active:Le.is_active}})}s&&(await _(s,Le.speaker_ids),await j(s,Le.moderator_ids),await f(s,Le.related_article_ids),Y.invalidateQueries({queryKey:["events"]})),ue(!1)}catch(s){const e="PGRST204"===(null==s?void 0:s.code)&&"string"==typeof(null==s?void 0:s.message)&&(s.message.includes("agenda_enabled")||s.message.includes("agenda_timezone"));G({title:"Save failed",description:e?"Agenda fields are missing in the database. Run the required Supabase migration.":"string"==typeof(null==s?void 0:s.message)||s instanceof Error?s.message:"Unknown error",variant:"destructive"})}},className:"space-y-4","aria-busy":ke,children:[t.jsxs(m,{className:"border-dashed bg-muted/20",children:[t.jsxs(u,{children:[t.jsx(p,{className:"text-base",children:"Live Preview"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Updates instantly as you type (Event page style)."})]}),t.jsxs(x,{className:"space-y-3",children:[t.jsxs(m,{className:"overflow-hidden bg-background",children:[Le.image_url&&t.jsx("div",{className:"aspect-video w-full overflow-hidden bg-muted",children:t.jsx("img",{src:Le.image_url,alt:"",className:"h-full w-full object-cover"})}),t.jsxs(x,{className:"p-6 space-y-4",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[Le.is_featured&&t.jsx("span",{className:"inline-flex rounded-full px-2 py-0.5 text-xs font-medium bg-primary/20 text-primary",children:"Featured"}),t.jsx("span",{className:"inline-flex rounded-full px-2 py-0.5 text-xs font-medium border",children:Le.is_active?"Active":"Draft"}),t.jsx("h3",{className:"font-heading text-xl font-bold text-foreground",children:Le.title||"Event title preview"})]}),!(!Le.event_date&&!Le.end_date)&&t.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground text-sm",children:[t.jsx(Calendar,{className:"h-4 w-4 flex-shrink-0"}),t.jsxs("span",{children:[Le.event_date||Le.end_date,Le.event_time?` ${Le.event_time}`:"",Le.end_date?` – ${Le.end_date}`:"",Le.end_time?` ${Le.end_time}`:"",Le.event_time||Le.end_time?" ET":""]})]}),Le.location&&t.jsx("p",{className:"text-sm text-muted-foreground",children:Le.location}),Le.description&&t.jsx("p",{className:"text-sm whitespace-pre-wrap leading-relaxed",children:Le.description}),t.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[Le.agenda_enabled&&t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-primary",children:[t.jsx(I,{className:"h-4 w-4"}),"View program"]}),Le.program_file_url?t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-primary",children:[t.jsx(Q,{className:"h-4 w-4"}),"View program page"]}):Le.link_url&&t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-primary",children:["Register ",t.jsx(O,{className:"h-4 w-4"})]}),Le.youtube_url&&t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-primary",children:[t.jsx(W,{className:"h-4 w-4"}),"Watch on YouTube"]})]})]})]}),t.jsxs("div",{className:"flex flex-wrap gap-2 text-xs text-muted-foreground",children:[t.jsxs("span",{className:"rounded-full border px-2 py-1",children:["URL preview: /events/",(null==(s=Le.slug)?void 0:s.trim())||"<event-id>"]}),Le.agenda_enabled&&t.jsxs("span",{className:"rounded-full border px-2 py-1",children:["Program URL: /events/",(null==(i=Le.slug)?void 0:i.trim())||"<event-id>","/agenda"]})]})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"title",children:"Title *"}),t.jsx(h,{id:"title",value:Le.title,onChange:e=>Me({...Le,title:e.target.value}),required:!0})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"slug",children:"URL slug (optional)"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Custom URL for the event, e.g. /events/my-conference-2025. Leave empty to use ID."}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx(h,{id:"slug",value:Le.slug,onChange:e=>Me(t=>({...t,slug:e.target.value})),placeholder:"my-event-2025",className:"flex-1"}),t.jsx(r,{type:"button",variant:"outline",size:"sm",onClick:()=>{const e=Le.title.toLowerCase().trim().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"");Me(t=>({...t,slug:e}))},children:"From title"})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"description",children:"Description"}),t.jsx(w,{id:"description",value:Le.description,onChange:e=>Me({...Le,description:e.target.value}),rows:3})]}),t.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"event_date",children:"Event Date (optional)"}),t.jsx(h,{id:"event_date",type:"date",value:Le.event_date,onChange:e=>Me(t=>({...t,event_date:e.target.value}))})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"event_time",children:"Event time (US Eastern, ET) — optional"}),t.jsx(h,{id:"event_time",type:"time",value:Le.event_time,onChange:e=>Me(t=>({...t,event_time:e.target.value}))})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"end_date",children:"End Date (optional)"}),t.jsx(h,{id:"end_date",type:"date",value:Le.end_date,onChange:e=>Me(t=>({...t,end_date:e.target.value}))})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"end_time",children:"End time (US Eastern, ET) — optional"}),t.jsx(h,{id:"end_time",type:"time",value:Le.end_time,onChange:e=>Me(t=>({...t,end_time:e.target.value}))})]})]}),t.jsx("p",{className:"text-xs text-muted-foreground",children:'Event and end times must be entered as US Eastern Time (ET). The site shows them with an "ET" label for visitors.'}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"location",children:"Location"}),t.jsx(h,{id:"location",value:Le.location,onChange:e=>Me(t=>({...t,location:e.target.value})),placeholder:"e.g. Tbilisi, Georgia"})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"link_url",children:"Link URL (registration or more info)"}),t.jsx(h,{id:"link_url",type:"url",value:Le.link_url,onChange:e=>Me(t=>({...t,link_url:e.target.value})),placeholder:"https://..."}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Used only when no Program File is uploaded."})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Program File (agenda alternative)"}),Le.program_file_url&&t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("a",{href:Le.program_file_url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 text-sm font-medium text-primary hover:underline",children:[t.jsx(Q,{className:"h-4 w-4"}),(null==Pe?void 0:Pe.name)||"Open uploaded file",t.jsx(O,{className:"h-3.5 w-3.5"})]}),t.jsx(r,{type:"button",variant:"destructive",size:"icon",className:"h-7 w-7",onClick:()=>{Ue(null),Me(e=>({...e,program_file_url:""}))},children:t.jsx(J,{className:"h-3 w-3"})})]}),t.jsx(h,{type:"file",accept:".pdf,.png,.jpg,.jpeg,application/pdf,image/png,image/jpeg",onChange:async e=>{var t;const s=null==(t=e.target.files)?void 0:t[0];if(!s)return;if(["application/pdf","image/png","image/jpeg"].includes(s.type))if(s.size>10485760)G({title:"Error",description:"File size should be less than 10MB",variant:"destructive"});else{Ue(s),De(!0);try{const e=s.name.split(".").pop(),t=`${Date.now()}-${Math.random().toString(36).substring(2)}.${e}`,{error:i}=await a.storage.from("event-program-files").upload(t,s,{cacheControl:"3600",upsert:!1});if(i)throw i;const{data:{publicUrl:r}}=a.storage.from("event-program-files").getPublicUrl(t);Me(e=>({...e,program_file_url:r}))}catch(i){G({title:"Error",description:i instanceof Error?i.message:"Failed to upload program file",variant:"destructive"})}finally{De(!1)}}else G({title:"Error",description:"Please upload a PDF, PNG, or JPG file",variant:"destructive"})},disabled:ze,className:"cursor-pointer"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Upload PDF/PNG/JPG (max 10MB). This creates a dedicated public program page with share URL and QR."})]}),t.jsxs("div",{className:"rounded-lg border p-4 space-y-3",children:[t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[t.jsxs("div",{children:[t.jsx(N,{htmlFor:"agenda_enabled",children:"Published program (agenda)"}),t.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"When enabled, visitors can open /events/your-slug/agenda. Configure days and sessions under Program."})]}),t.jsx(k,{id:"agenda_enabled",checked:Le.agenda_enabled,onCheckedChange:e=>Me(t=>({...t,agenda_enabled:e}))})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"agenda_timezone",children:"Program timezone (IANA)"}),t.jsx(h,{id:"agenda_timezone",value:Le.agenda_timezone,onChange:e=>Me(t=>({...t,agenda_timezone:e.target.value}
1)),placeholder:"America/New_York"})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"youtube_url",children:"YouTube URL (recording for past events)"}),t.jsx(h,{id:"youtube_url",type:"url",value:Le.youtube_url,onChange:e=>Me(t=>({...t,youtube_url:e.target.value})),placeholder:"https://youtube.com/watch?v=..."}),t.jsx("p",{className:"text-xs text-muted-foreground",children:'Add YouTube link for past events to show "Watch on YouTube" button.'})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Event Image"}),Le.image_url&&t.jsxs("div",{className:"relative inline-block",children:[t.jsx("img",{src:Le.image_url,alt:"Preview",className:"h-24 w-auto max-w-[200px] object-cover border rounded-lg"}),t.jsx(r,{type:"button",variant:"destructive",size:"icon",className:"absolute -top-2 -right-2 h-6 w-6 rounded-full",onClick:()=>{Te(null),Me(e=>({...e,image_url:""}))},children:t.jsx(J,{className:"h-3 w-3"})})]}),t.jsx(h,{type:"file",accept:"image/*",onChange:async e=>{var t;const s=null==(t=e.target.files)?void 0:t[0];if(s)if(s.type.startsWith("image/"))if(s.size>2097152)G({title:"Error",description:"File size should be less than 2MB",variant:"destructive"});else{Te(s),Ae(!0);try{const e=s.name.split(".").pop(),t=`${Date.now()}-${Math.random().toString(36).substring(2)}.${e}`,{error:i}=await a.storage.from("event-images").upload(t,s,{cacheControl:"3600",upsert:!1});if(i)throw i;const{data:{publicUrl:r}}=a.storage.from("event-images").getPublicUrl(t);Me(e=>({...e,image_url:r}))}catch(i){G({title:"Error",description:i instanceof Error?i.message:"Failed to upload image",variant:"destructive"})}finally{Ae(!1)}}else G({title:"Error",description:"Please upload an image file",variant:"destructive"})},disabled:Se,className:"cursor-pointer"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Upload image (max 2MB, PNG/JPG/WebP)"})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"display_order",children:"Display Order"}),t.jsx(h,{id:"display_order",type:"number",value:Le.display_order,onChange:e=>Me(t=>({...t,display_order:parseInt(e.target.value)||0}))})]}),t.jsxs("div",{className:"flex flex-wrap gap-6",children:[t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(k,{id:"is_active",checked:Le.is_active,onCheckedChange:e=>Me(t=>({...t,is_active:e}))}),t.jsx(N,{htmlFor:"is_active",children:"Active (visible on site)"})]}),t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(k,{id:"is_featured",checked:Le.is_featured,onCheckedChange:e=>Me(t=>({...t,is_featured:e}))}),t.jsx(N,{htmlFor:"is_featured",children:"Mark as featured"})]}),t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(k,{id:"is_past_manual",checked:Le.is_past_manual,onCheckedChange:e=>Me(t=>({...t,is_past_manual:e}))}),t.jsx(N,{htmlFor:"is_past_manual",children:"Show in Past Events (public /events page)"})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Speakers (from Experts & Contributors)"}),t.jsx(b,{className:"h-32 rounded-md border p-2",children:t.jsx("div",{className:"space-y-2",children:0===Qe.length?t.jsx("p",{className:"text-sm text-muted-foreground",children:"No fellows in database."}):Qe.map(e=>t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(ae,{id:`speaker-${e.id}`,checked:Le.speaker_ids.includes(e.id),onCheckedChange:t=>((e,t)=>{Me(s=>({...s,speaker_ids:t?[...s.speaker_ids,e]:s.speaker_ids.filter(t=>t!==e)}))})(e.id,!0===t)}),t.jsxs("label",{htmlFor:`speaker-${e.id}`,className:"text-sm cursor-pointer",children:[e.name," — ",e.title]})]},e.id))})})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Moderators (from Experts & Contributors)"}),t.jsx(b,{className:"h-32 rounded-md border p-2",children:t.jsx("div",{className:"space-y-2",children:0===Qe.length?t.jsx("p",{className:"text-sm text-muted-foreground",children:"No fellows in database."}):Qe.map(e=>t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(ae,{id:`mod-${e.id}`,checked:Le.moderator_ids.includes(e.id),onCheckedChange:t=>((e,t)=>{Me(s=>({...s,moderator_ids:t?[...s.moderator_ids,e]:s.moderator_ids.filter(t=>t!==e)}))})(e.id,!0===t)}),t.jsxs("label",{htmlFor:`mod-${e.id}`,className:"text-sm cursor-pointer",children:[e.name," — ",e.title]})]},e.id))})})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Related Publications (optional)"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Link articles from the site to show below the event on its page."}),t.jsx(b,{className:"h-32 rounded-md border p-2",children:t.jsx("div",{className:"space-y-2",children:0===We.length?t.jsx("p",{className:"text-sm text-muted-foreground",children:"No published articles."}):We.map(e=>t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(ae,{id:`pub-${e.id}`,checked:Le.related_article_ids.includes(e.id),onCheckedChange:t=>((e,t)=>{Me(s=>({...s,related_article_ids:t?[...s.related_article_ids,e]:s.related_article_ids.filter(t=>t!==e)}))})(e.id,!0===t)}),t.jsx("label",{htmlFor:`pub-${e.id}`,className:"text-sm cursor-pointer truncate flex-1",children:e.title})]},e.id))})})]}),t.jsxs("div",{className:"flex justify-end space-x-2 pt-4",children:[t.jsx(r,{type:"button",variant:"outline",onClick:()=>ue(!1),children:"Cancel"}),t.jsx(r,{type:"submit",children:xe?"Update":"Create"})]})]})]})]})]}),tt&&t.jsxs(m,{children:[t.jsxs(u,{children:[t.jsxs(p,{className:"flex items-center gap-2",children:[t.jsx(W,{className:"h-5 w-5"}),"View Our Events"]}),t.jsx("p",{className:"text-sm text-muted-foreground",children:"Featured video block at the top of the Events page. YouTube embed, optional description, speakers & moderators."})]}),t.jsx(x,{children:t.jsxs("form",{onSubmit:async e=>{if(e.preventDefault(),tt)try{await st.mutateAsync({id:tt.id,title:at.title,youtube_url:at.youtube_url||null,description:at.description||null,is_active:at.is_active}),await ee(tt.id,at.speaker_ids),await te(tt.id,at.moderator_ids),Y.invali
1dateQueries({queryKey:["events-hero"]}),G({title:"Success",description:"View Our Events updated"})}catch(t){G({title:"Error",description:t instanceof Error?t.message:"Failed to update",variant:"destructive"})}},className:"space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"hero_title",children:"Section Title"}),t.jsx(h,{id:"hero_title",value:at.title,onChange:e=>it(t=>({...t,title:e.target.value})),placeholder:"View Our Events"})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"hero_youtube",children:"YouTube URL *"}),t.jsx(h,{id:"hero_youtube",type:"url",value:at.youtube_url,onChange:e=>it(t=>({...t,youtube_url:e.target.value})),placeholder:"https://youtube.com/watch?v=..."}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Video will be embedded on the Events page. Required for the block to display."})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{htmlFor:"hero_description",children:"Event Description (optional)"}),t.jsx(w,{id:"hero_description",value:at.description,onChange:e=>it(t=>({...t,description:e.target.value})),rows:3,placeholder:"Brief event description..."})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Speakers (Experts & Contributors)"}),t.jsx(b,{className:"h-28 rounded-md border p-2",children:0===Qe.length?t.jsx("p",{className:"text-xs text-muted-foreground",children:"No fellows."}):Qe.map(e=>t.jsxs("div",{className:"flex items-center space-x-2 py-1",children:[t.jsx(ae,{id:`hero-sp-${e.id}`,checked:at.speaker_ids.includes(e.id),onCheckedChange:t=>{return s=e.id,a=!0===t,void it(e=>({...e,speaker_ids:a?[...e.speaker_ids,s]:e.speaker_ids.filter(e=>e!==s)}));var s,a}}),t.jsx("label",{htmlFor:`hero-sp-${e.id}`,className:"text-sm cursor-pointer",children:e.name})]},e.id))})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(N,{children:"Moderators (Experts & Contributors)"}),t.jsx(b,{className:"h-28 rounded-md border p-2",children:0===Qe.length?t.jsx("p",{className:"text-xs text-muted-foreground",children:"No fellows."}):Qe.map(e=>t.jsxs("div",{className:"flex items-center space-x-2 py-1",children:[t.jsx(ae,{id:`hero-mod-${e.id}`,checked:at.moderator_ids.includes(e.id),onCheckedChange:t=>{return s=e.id,a=!0===t,void it(e=>({...e,moderator_ids:a?[...e.moderator_ids,s]:e.moderator_ids.filter(e=>e!==s)}));var s,a}}),t.jsx("label",{htmlFor:`hero-mod-${e.id}`,className:"text-sm cursor-pointer",children:e.name})]},e.id))})]})]}),t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center space-x-2",children:[t.jsx(k,{id:"hero_active",checked:at.is_active,onCheckedChange:e=>it(t=>({...t,is_active:e}))}),t.jsx(N,{htmlFor:"hero_active",children:"Show on Events page"})]}),t.jsx(r,{type:"submit",disabled:st.isPending,children:st.isPending?"Saving...":"Save View Our Events"})]})]})})]}),t.jsxs(m,{children:[t.jsxs(u,{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[t.jsx(p,{children:"Events"}),t.jsxs("div",{className:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center",children:[t.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[t.jsx(H,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),t.jsx(h,{placeholder:"Search events...",value:fe,onChange:e=>ye(e.target.value),className:"pl-10"})]}),t.jsxs("p",{className:"text-sm text-muted-foreground whitespace-nowrap",children:[Ve," total",Ie&&!Ge?" · Updating…":""]})]})]}),t.jsx(x,{children:Ge?t.jsx("div",{className:"space-y-4",children:[...Array(3)].map((e,s)=>t.jsx(v,{className:"h-16 w-full"},s))}):t.jsxs("div",{className:g("transition-opacity",Ie&&!Ge&&"opacity-70"),children:[t.jsxs(D,{children:[t.jsx(P,{children:t.jsxs(T,{children:[t.jsx(U,{children:"Title"}),t.jsx(U,{children:"Date"}),t.jsx(U,{children:"Location"}),t.jsx(U,{children:"Order"}),t.jsx(U,{children:"Status"}),t.jsx(U,{className:"text-right",children:"Actions"})]})}),t.jsx(L,{children:0===Re.length?t.jsx(T,{children:t.jsx(z,{colSpan:6,className:"py-12 text-center text-muted-foreground",children:be.trim()?"No events match your search.":"No events yet. Add your first event to get started."})}):Re.map(e=>t.jsx(ve,{event:e,onEdit:dt,onDelete:ot,onToggleActive:ct,isTogglingActive:Ee===e.id},e.id))})]}),Ve>0&&t.jsxs("div",{className:"flex flex-col gap-3 border-t border-border pt-4 mt-4 sm:flex-row sm:items-center sm:justify-between",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:["Showing ",Be,"–",Ke," of ",Ve]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(r,{variant:"outline",size:"sm",disabled:_e<=1||Ie,onClick:()=>je(e=>Math.max(1,e-1)),children:"Previous"}),t.jsxs("span",{className:"text-sm text-muted-foreground tabular-nums",children:["Page ",_e," of ",Oe]}),t.jsx(r,{variant:"outline",size:"sm",disabled:_e>=Oe||Ie,onClick:()=>je(e=>Math.min(Oe,e+1)),children:"Next"})]})]})]})})]})]}),t.jsx(ie,{open:!!Ne,onOpenChange:()=>we(null),children:t.jsxs(re,{children:[t.jsxs(le,{children:[t.jsx(ne,{children:"Are you sure?"}),t.jsxs(de,{children:["This action cannot be undone. This will permanently delete",Ne?` "${Ne.title}"`:" this event","."]})]}),t.jsxs(oe,{children:[t.jsx(ce,{children:"Cancel"}),t.jsx(me,{onClick:mt,children:"Delete"})]})]})})]})]})};export{_e 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.