PageSourceSearch

https://asc-fechten.lovable.app/assets/BlogManagement-BHkyq8bH.js

js asc-fechten.lovable.app collected 2026-10-03 03:22:45 UTC 28,615 bytes, 2 lines download raw bytes

1import{j as e}from"./ui-core-BOiROUzb.js";import{r as t}from"./vendor-3RvhFBmN.js";import{q as a,s,J as l,B as r,D as n,b as i,c as d,d as o,e as c,I as u,p as h,h as m,C as g,f as p,g as x,i as f}from"./index-7oMSrkv7.js";import{L as v}from"./label-BJK4rm6B.js";import{T as _}from"./textarea-CMnt4aSG.js";import{S as b}from"./switch-r7-5Z27b.js";import{T as j,a as w,b as y,c as N,d as k,e as B}from"./table-B2djFJVW.js";import{C}from"./calendar-fOHJzi_l.js";import{P as S,a as F,b as E}from"./popover-BDAQR4M4.js";import D from"./RichTextEditor-BJ3LyrvW.js";import L from"./MediaLibraryDialog-BZViV-uG.js";import{u as $}from"./useFaceDetectionCropper-Oqy73YgM.js";import{c as T,L as M}from"./react-router-qmmoPdSR.js";import{l as I,af as z,ag as U,v as P,h as q,ah as A,X as K,a3 as R,S as O,ae as V,ai as G,aj as H,ak as W,al as J}from"./lucide-W1LoSVjr.js";import{f as X}from"./utils-D7Zen_Cu.js";import{d as Z}from"./de-DJuWpkdi.js";import"./supabase-D3BpmWu0.js";import"./ui-display-CzHBGL7u.js";import"./ui-form-CsMHcxL1.js";import"./rich-editor-BeE17Zin.js";import"./select-B64zx4xH.js";import"./LazyImage-BcyKcgKQ.js";import"./face-api-C-EH-ykn.js";function Q(e){if(!e)return e;return e.replace(/<span[^>]*>/g,"").replace(/<\/span>/g,"")}async function Y(e){const t=[];let a=0;try{const{data:s,error:l}=await e.from("blog_posts").select("id, title, content").or("content.like.%<span%,content.like.%</span>%");if(l)throw l;if(!s||0===s.length)return{total:0,cleaned:0,errors:[]};for(const r of s){const s=Q(r.content);if(s!==r.content){const{error:l}=await e.from("blog_posts").update({content:s,updated_at:(new Date).toISOString()}).eq("id",r.id);l?t.push(`${r.title}: ${l.message}`):a++}}return{total:s.length,cleaned:a,errors:t}}catch(s){return t.push(`Fetch error: ${s.message}`),{total:0,cleaned:0,errors:t}}}function ee(){const{user:Q}=a(),[ee,te]=t.useState([]),[ae,se]=t.useState(null),[le,re]=t.useState(""),ne=(e,t,a)=>{se({id:e,field:t}),re(a||"")},ie=async()=>{if(!ae)return;const{id:e,field:t}=ae,a=ee.find(t=>t.id===e),r=le.trim(),n="title"===t?r:""===r?null:r;if(se(null),a&&("title"!==t||r)&&(a[t]||null)!==(n||null))try{const{error:a}=await s.from("blog_posts").update({[t]:n}).eq("id",e);if(a)throw a;te(a=>a.map(a=>a.id===e?{...a,[t]:n}:a)),l.success("Gespeichert")}catch(i){l.error("Fehler beim Speichern")}},[de,oe]=t.useState(!0),[ce,ue]=t.useState(null),[he,me]=t.useState(!1),[ge,pe]=t.useState(!1),[xe,fe]=t.useState("content");$();const[ve,_e]=t.useState(""),[be,je]=t.useState([]),[we,ye]=t.useState("created_at"),[Ne,ke]=t.useState("desc"),[Be,Ce]=t.useState(null),[Se,Fe]=t.useState({title:"",slug:"",content:"",excerpt:"",featured_image:"",results_pdf_url:"",published:!0,featured:!1,scheduled_publish_date:"",event_date:"",event_end_date:"",event_location:"",author:"",tags:[],additional_images:[]});t.useRef(null);const[Ee,De]=t.useState(0),[Le,$e]=t.useState(!1),[Te,Me]=t.useState(!1),[Ie]=T(),[ze,Ue]=t.useState(Ie.get("q")||"");t.useEffect(()=>{const e=Ie.get("q");e&&Ue(e)},[Ie]),t.useEffect(()=>{var e;const t=null==(e=Ie.get("q"))?void 0:e.trim();if(!t||!Q||Le)return;let a=!1;return(async()=>{const e=`%${t.replace(/[%_\\]/g,e=>`\\${e}`)}%`,{data:l,error:r}=await s.from("blog_posts").select(Pe).is("deleted_at",null).ilike("title",e).order("created_at",{ascending:!1}).limit(50);a||r||!(null==l?void 0:l.length)||te(e=>{const t=new Set(e.map(e=>e.id)),a=l.filter(e=>!t.has(e.id));return a.length?[...e,...a]:e})})(),()=>{a=!0}},[Ie,Q,Le,de]);const Pe="id, title, slug, published, created_at, updated_at, event_date, event_end_date, event_location, author, tags",qe=t.useCallback(async(e=Le)=>{if(Q){oe(!0);try{let t=s.from("blog_posts").select(Pe,{count:"exact"}).is("deleted_at",null).order("created_at",{ascending:!1});e||(t=t.limit(20));const{data:a,error:l,count:r}=await t;if(l)throw l;te(a||[]),De(r??((null==a?void 0:a.length)||0))}catch(t){l.error("Fehler beim Laden der Beiträge")}finally{oe(!1)}}},[Q,Le]);t.useEffect(()=>{qe()},[qe]),t.useEffect(()=>{(async()=>{if(Q)try{const{data:e,error:t}=await s.from("blog_posts").select("id").or("content.like.%<span%,content.like.%</span>%").limit(1);if(t)throw t;if(e&&e.length>0){const e=await Y(s);e.cleaned>0&&(l.success(`✅ ${e.cleaned} Beiträge automatisch bereinigt - Bilder werden jetzt korrekt angezeigt`),qe())}}catch(e){}})()},[Q,qe]);const Ae=e=>{we===e?ke("asc"===Ne?"desc":"asc"):(ye(e),ke("asc"))},Ke=t=>we!==t?e.jsx(H,{className:"h-4 w-4"}):"asc"===Ne?e.jsx(W,{className:"h-4 w-4"}):e.jsx(J,{className:"h-4 w-4"}),Re=t.useMemo(()=>{const e=ze.trim().toLowerCase();return[...e?ee.filter(t=>t.title.toLowerCase().includes(e)||(t.author||"").toLowerCase().includes(e)||(t.event_location||"").toLowerCase().includes(e)||(t.tags||[]).some(t=>t.toLowerCase().includes(e))):ee].sort((e,t)=>
1{let a,s;switch(we){case"title":a=e.title.toLowerCase(),s=t.title.toLowerCase();break;case"author":a=(e.author||"").toLowerCase(),s=(t.author||"").toLowerCase();break;case"event_date":a=e.event_date?new Date(e.event_date).getTime():0,s=t.event_date?new Date(t.event_date).getTime():0;break;case"published":a=e.published?1:0,s=t.published?1:0;break;case"tag_count":a=e.tags?e.tags.length:0,s=t.tags?t.tags.length:0;break;case"created_at":a=new Date(e.created_at).getTime(),s=new Date(t.created_at).getTime();break;default:return 0}return"asc"===Ne?a>s?1:a<s?-1:0:a<s?1:a>s?-1:0})},[ee,we,Ne,ze]),Oe=e=>e.toLowerCase().replace(/ä/g,"ae").replace(/ö/g,"oe").replace(/ü/g,"ue").replace(/ß/g,"ss").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,""),Ve=t.useCallback(e=>{const t=/!\[([^\]]*)\]\(([^)]+)\)/g,a=[];let s;for(;null!==(s=t.exec(e));)a.push(s[2]);return a},[]),Ge=t.useCallback(async(e,t)=>{if(Q&&!(t.length<4))try{const{data:a}=await s.from("events").select("id").eq("blog_post_id",e.id).single();let r;if(a){const{data:t,error:n}=await s.from("events").update({name:e.title,description:e.excerpt||`Bildergalerie zu: ${e.title}`,location:e.event_location||"Verein",date:e.event_date||(new Date).toISOString().split("T")[0]}).eq("id",a.id).select().single();if(n)throw n;r=t.id,await s.from("gallery_images").delete().eq("event_id",r),l.success(`Galerie-Event "${e.title}" aktualisiert`)}else{const{data:a,error:n}=await s.from("events").insert({name:e.title,description:e.excerpt||`Bildergalerie zu: ${e.title}`,location:e.event_location||"Verein",date:e.event_date||(new Date).toISOString().split("T")[0],created_by:Q.id,blog_post_id:e.id}).select().single();if(n)throw n;r=a.id,l.success(`Galerie-Event "${e.title}" mit ${t.length} Bildern erstellt`)}const n=t.map((t,a)=>({title:`${e.title} - Bild ${a+1}`,description:`Aus Blog-Beitrag: ${e.title}`,image_url:t,category:"blog",categories:["blog","veranstaltungen"],event_id:r,sort_order:a,created_by:Q.id,tags:e.tags||[]})),{error:i}=await s.from("gallery_images").insert(n);if(i)throw i}catch(a){l.error("Fehler beim Erstellen/Aktualisieren des Galerie-Events")}},[Q]),He=t.useCallback(async e=>{if(e.preventDefault(),Q)try{const e=Se.slug||Oe(Se.title),t=[...Ve(Se.content),...Se.additional_images];let a;if(ce){const{data:t,error:r}=await s.from("blog_posts").update({title:Se.title,slug:e,content:Se.content,excerpt:Se.excerpt||null,featured_image:Se.featured_image||null,published:Se.published,featured:Se.featured,scheduled_publish_date:Se.scheduled_publish_date||null,event_date:Se.event_date||null,event_end_date:Se.event_end_date||null,event_location:Se.event_location||null,author:Se.author||null,results_pdf_url:Se.results_pdf_url||null,tags:Se.tags&&Se.tags.length>0?Se.tags:null,additional_images:Se.additional_images&&Se.additional_images.length>0?Se.additional_images:null}).eq("id",ce.id).select().single();if(r)throw r;a=t,l.success("Blog-Beitrag erfolgreich aktualisiert")}else{const{data:t,error:r}=await s.from("blog_posts").insert({title:Se.title,slug:e,content:Se.content,excerpt:Se.excerpt||null,featured_image:Se.featured_image||null,published:Se.published,featured:Se.featured,scheduled_publish_date:Se.scheduled_publish_date||null,created_by:Q.id,event_date:Se.event_date||null,event_end_date:Se.event_end_date||null,event_location:Se.event_location||null,author:Se.author||null,results_pdf_url:Se.results_pdf_url||null,tags:Se.tags&&Se.tags.length>0?Se.tags:null,additional_images:Se.additional_images&&Se.additional_images.length>0?Se.additional_images:null}).select().single();if(r)throw r;a=t,l.success("Blog-Beitrag erfolgreich erstellt")}a.published&&t.length>=4&&await Ge(a,t),me(!1),Ze(),qe()}catch(t){l.error("Fehler beim Speichern des Blog-Beitrags")}},[Q,Se,ce,qe,Ve,Ge]),We=t.useRef(null);t.useEffect(()=>{const e=Ie.get("edit");if(!e||We.current===e)return;const t=ee.find(t=>t.id===e);t&&(We.current=e,Je(t))},[Ie,ee]);const Je=async e=>{try{const t=e.content?e:await(async e=>{const{data:t,error:a}=await s.from("blog_posts").select("*").eq("id",e).single();if(a)throw a;return t})(e.id);
1ue(t),Fe({title:t.title,slug:t.slug,content:t.content||"",excerpt:t.excerpt||"",featured_image:t.featured_image||"",results_pdf_url:t.results_pdf_url||"",published:t.published,featured:t.featured||!1,scheduled_publish_date:t.scheduled_publish_date||"",event_date:t.event_date||"",event_end_date:t.event_end_date||"",event_location:t.event_location||"",author:t.author||"",tags:t.tags||[],additional_images:t.additional_images||[]}),me(!0)}catch(t){l.error("Fehler beim Laden der Beitragsdaten")}},Xe=()=>{if(!ve.trim())return;const e=Se.tags||[];e.includes(ve.trim())||Fe({...Se,tags:[...e,ve.trim()]}),_e("")},Ze=t.useCallback(()=>{Fe({title:"",slug:"",content:"",excerpt:"",featured_image:"",results_pdf_url:"",published:!0,featured:!1,scheduled_publish_date:"",event_date:"",event_end_date:"",event_location:"",author:"",tags:[],additional_images:[]}),ue(null)},[]),Qe=async e=>{if(!e.type.startsWith("image/"))throw l.error("Bitte wählen Sie eine Bilddatei aus."),new Error("Invalid file format");try{l.info("📤 Lade Bild hoch...");const a=document.createElement("canvas"),r=a.getContext("2d");if(!r)throw new Error("Canvas context not available");const n=await new Promise((t,a)=>{const s=new Image;s.onload=()=>{t(s)},s.onerror=e=>{a(new Error("Failed to load image"))},s.src=URL.createObjectURL(e)});a.width=n.naturalWidth,a.height=n.naturalHeight,r.drawImage(n,0,0);const i=await new Promise(e=>a.toBlob(t=>e(t),"image/webp",.9));if(!i)throw new Error("Failed to create WebP blob");const d=new File([i],e.name.replace(/\.[^/.]+$/,".webp"),{type:"image/webp"}),o=e.name.replace(/\.[^/.]+$/,""),c=Date.now(),u=o.toLowerCase().replace(/[äöüß]/g,e=>({"ä":"ae","ö":"oe","ü":"ue","ß":"ss"}[e]||e)).replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,""),h=`${u}-${c}.webp`,{error:m}=await s.storage.from("blog-images").upload(h,d);if(m)throw m;const{data:g}=s.storage.from("blog-images").getPublicUrl(h);try{const{error:e}=await s.from("gallery_images").insert({title:u,description:"Bild hochgeladen über Blog-Editor",image_url:g.publicUrl,category:"blog",categories:["blog","uploads"],created_by:Q.id})}catch(t){}return l.success("✅ Bild erfolgreich hochgeladen!"),g.publicUrl}catch(a){throw a instanceof Error?a.message.includes("storage")||a.message.includes("upload")?l.error("Fehler beim Speichern des Bildes - Bitte versuchen Sie es erneut"):a.message.includes("Canvas")||a.message.includes("blob")?l.error("Fehler bei der Bildverarbeitung - Unsupported Browser?"):a.message.includes("load")?l.error("Fehler beim Laden des Bildes - Ist es beschädigt?"):l.error(`Fehler: ${a.message}`):l.error("Unbekannter Fehler beim Upload"),a}};t.useCallback(e=>{const t=`\n![Bild](${e})\n`,a=document.getElementById("content");if(a){const e=a.selectionStart,s=a.value.substring(0,e)+t+a.value.substring(e);Fe(e=>({...e,content:s})),setTimeout(()=>{a.focus(),a.setSelectionRange(e+t.length,e+t.length)},0)}},[]),t.useCallback(e=>{const t=e.map(e=>`![Bild](${e})`).join("\n")+"\n",a=document.getElementById("content");if(a){const e=a.selectionStart,s=a.value.substring(0,e)+"\n"+t+a.value.substring(e);Fe(e=>({...e,content:s})),setTimeout(()=>{a.focus(),a.setSelectionRange(e+t.length+1,e+t.length+1)},0)}},[]);const Ye=t.useCallback(e=>{Fe(t=>({...t,featured_image:e})),pe(!1)},[]),et=t.useCallback(e=>{Be&&Be(e),pe(!1)},[Be]);return Ve(Se.content),de?e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"h-8 bg-muted animate-pulse rounded"}),e.jsx("div",{className:"h-64 bg-muted animate-pulse rounded"})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl md:text-3xl font-bold",children:"Blog-Verwaltung"}),e.jsx("p",{className:"text-muted-foreground text-sm md:text-base",children:"Blog-Beiträge erstellen, bearbeiten und verwalten"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(r,{variant:"outline",onClick:async()=>{if(window.confirm("Möchten Sie alle Blog-Beiträge von korrupten Bild-Formatierungen bereinigen?\n\nDies entfernt HTML-Span-Tags, die die Bild-Anzeige verhindern."))try{l.info("Bereinigung wird durchgeführt...");const e=await Y(s);e.errors.length>0?l.error(`Fehler bei ${e.errors.length} Beiträgen: ${e.errors[0]}`):e.cleaned>0?(l.success(`✅ ${e.cleaned} von ${e.total} Beiträgen bereinigt`),qe()):l.info("Keine korrupten Beiträge gefunden")}catch(e){l.error("Fehler bei der Bereinigung")}},title:"Bereinigt korrupte HTML-Spans in allen Beiträgen",children:[e.jsx(I,{className:"h-4 w-4 mr-2"}),"Bilder reparieren"]}),e.jsx(M,{to:"/admin/blog/trash",children:e.jsxs(r,{variant:"outline",children:[e.jsx(z,{className:"h-4 w-4 mr-2"}),"Papierkorb"]})}),e.jsxs(n,{open:he,onOpenChange:me,children:[e.jsx(i,{asChild:!0,children:e.jsxs(r,{onClick:Ze,children:[e.jsx(U,{className:"h-4 w-4 mr-2"}),"Neuer Beitrag"]})}),e.jsxs(d,{className:"max-w-4xl max-h-[90vh] overflow-y-auto",children:[e.jsx(o,{children:e.jsx(c,{children:ce?"Blog-Beitrag bearbeiten":"Neuer Blog-Beitrag"})}),e.jsxs("form",{onSubmit:He,className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"title",children:"Titel"}),e.jsx(u,{id:"title",value:Se.title,onChange:e=>{return t=e.target.value,void Fe({...Se,title:t,slug:Se.slug||Oe
1(t)});var t},required:!0})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(v,{htmlFor:"slug",children:"URL-Slug"}),e.jsxs("div",{className:"group relative",children:[e.jsxs("svg",{className:"w-4 h-4 text-muted-foreground hover:text-foreground cursor-help",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}),e.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]}),e.jsx("div",{className:"invisible group-hover:visible absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 bg-popover text-popover-foreground text-sm rounded-md shadow-lg border w-80 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-300 delay-1000",children:'Als URL-Slug bezeichnet man den Teil einer URL, der eine Seite identifiziert und der oft direkt nach der Domain-Endung kommt. Zum Beispiel würde der Slug des Domainnamens „https://www.example.com/das-ist-der-slug" in diesem Fall „das-ist-der-slug" lauten.'})]})]}),e.jsx(u,{id:"slug",value:Se.slug,onChange:e=>Fe({...Se,slug:e.target.value})})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"excerpt",children:"Kurzbeschreibung"}),e.jsx(_,{id:"excerpt",value:Se.excerpt,onChange:e=>Fe({...Se,excerpt:e.target.value}),rows:2})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"author",children:"Autor"}),e.jsx(u,{id:"author",value:Se.author,onChange:e=>Fe({...Se,author:e.target.value}),placeholder:"Name des Beitragsautors"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"event_date",children:"Event Start-Datum (optional)"}),e.jsxs(S,{children:[e.jsx(F,{asChild:!0,children:e.jsxs(r,{variant:"outline",className:h("w-full justify-start text-left font-normal",!Se.event_date&&"text-muted-foreground"),children:[e.jsx(P,{className:"mr-2 h-4 w-4"}),Se.event_date?X(new Date(Se.event_date+"T00:00:00"),"dd.MM.yyyy",{locale:Z}):e.jsx("span",{children:"Datum auswählen"})]})}),e.jsx(E,{className:"w-auto p-0",align:"start",children:e.jsx(C,{mode:"single",selected:Se.event_date?new Date(Se.event_date+"T00:00:00"):void 0,onSelect:e=>{Fe({...Se,event_date:e?X(e,"yyyy-MM-dd"):""})},initialFocus:!0})})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"event_end_date",children:"Event End-Datum (optional)"}),e.jsxs(S,{children:[e.jsx(F,{asChild:!0,children:e.jsxs(r,{variant:"outline",className:h("w-full justify-start text-left font-normal",!Se.event_end_date&&"text-muted-foreground"),children:[e.jsx(P,{className:"mr-2 h-4 w-4"}),Se.event_end_date?X(new Date(Se.event_end_date+"T00:00:00"),"dd.MM.yyyy",{locale:Z}):e.jsx("span",{children:"Datum auswählen"})]})}),e.jsx(E,{className:"w-auto p-0",align:"start",children:e.jsx(C,{mode:"single",selected:Se.event_end_date?new Date(Se.event_end_date+"T00:00:00"):void 0,onSelect:e=>{Fe({...Se,event_end_date:e?X(e,"yyyy-MM-dd"):""})},initialFocus:!0})})]})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"event_location",children:"Event Ort (optional)"}),e.jsx(u,{id:"event_location",value:Se.event_location,onChange:e=>Fe({...Se,event_location:e.target.value}),placeholder:"Ort des Events"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"results_pdf",children:"Ergebnisse-PDF (optional)"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(u,{value:Se.results_pdf_url,onChange:e=>Fe({...Se,results_pdf_url:e.target.value}),placeholder:"URL der Ergebnisse-PDF oder hochladen"}),e.jsx("input",{type:"file",accept:".pdf",onChange:async e=>{var t;const a=null==(t=e.target.files)?void 0:t[0];if(a)if("application/pdf"===a.type)try{const e=a.name.split(".").pop(),t=`results_${Date.now()}.${e}`,{error:r}=await s.storage.from("documents").upload(t,a);if(r)throw r;const{data:n}=s.storage.from("documents").getPublicUrl(t);Fe(e=>({...e,results_pdf_url:n.publicUrl})),l.success("Ergebnisse-PDF erfolgreich hochgeladen")}catch(r){l.error("Fehler beim Hochladen der PDF-Datei")}finally{e.target.value=""}else l.error("Bitte wählen Sie eine PDF-Datei aus.")},className:"hidden",id:"pdf-upload"}),e.jsxs(r,{type:"button",variant:"outline",onClick:()=>{var e;
1return null==(e=document.getElementById("pdf-upload"))?void 0:e.click()},children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"PDF hochladen"]})]}),Se.results_pdf_url&&e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(q,{className:"h-4 w-4"}),e.jsx("a",{href:Se.results_pdf_url,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:underline",children:"PDF-Vorschau öffnen"})]})]})]}),e.jsxs("div",{children:[e.jsx(v,{children:"Featured Image"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(u,{value:Se.featured_image,onChange:e=>Fe({...Se,featured_image:e.target.value}),placeholder:"URL des Beitragsbildes"}),e.jsx("input",{type:"file",accept:"image/*",onChange:async e=>{var t;const a=null==(t=e.target.files)?void 0:t[0];if(a)try{const e=await Qe(a);Fe(t=>({...t,featured_image:e})),l.success("Featured Image hochgeladen")}catch(s){l.error("Upload fehlgeschlagen")}finally{e.target.value=""}},className:"hidden",id:"featured-image-upload"}),e.jsx(r,{type:"button",variant:"outline",onClick:()=>{var e;return null==(e=document.getElementById("featured-image-upload"))?void 0:e.click()},children:e.jsx(A,{className:"h-4 w-4"})}),e.jsx(r,{type:"button",variant:"outline",onClick:()=>{fe("featured"),pe(!0)},children:e.jsx(I,{className:"h-4 w-4"})})]}),Se.featured_image&&e.jsx("div",{className:"mt-2",children:e.jsx("img",{src:Se.featured_image,alt:"Preview",className:"w-32 h-32 object-cover rounded-md"})})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"tags",children:"Tags"}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-2",children:Se.tags.map(t=>e.jsxs(m,{variant:"secondary",className:"flex items-center gap-1",children:[t,e.jsx(K,{className:"h-3 w-3 cursor-pointer",onClick:()=>(e=>{const t=Se.tags||[];Fe({...Se,tags:t.filter(t=>t!==e)})})(t)})]},t))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{value:ve,onChange:e=>_e(e.target.value),placeholder:"Neuer Tag",onKeyPress:e=>("Enter"===e.key||","===e.key)&&(e.preventDefault(),Xe())}),e.jsx(r,{type:"button",onClick:Xe,children:e.jsx(R,{className:"h-4 w-4"})})]})]}),e.jsx(D,{content:Se.content,onChange:e=>Fe({...Se,content:e}),onImageUpload:Qe,onOpenMediaLibrary:()=>{fe("content"),pe(!0)},onInsertImageFromLibrary:e=>{Ce(()=>e),fe("content"),pe(!0)},additionalImages:Se.additional_images,onAdditionalImagesChange:e=>Fe({...Se,additional_images:e})}),e.jsxs("div",{className:"flex items-center space-x-4",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(b,{id:"published",checked:Se.published,onCheckedChange:e=>Fe({...Se,published:e})}),e.jsx(v,{htmlFor:"published",children:"Veröffentlicht"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(b,{id:"featured",checked:Se.featured,onCheckedChange:e=>Fe({...Se,featured:e})}),e.jsx(v,{htmlFor:"featured",children:"Featured"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(r,{type:"button",variant:"outline",onClick:()=>me(!1),children:"Abbrechen"}),e.jsx(r,{type:"submit",children:ce?"Aktualisieren":"Erstellen"})]})]})]})]})]})]}),e.jsxs(g,{children:[e.jsxs(p,{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 space-y-0",children:[e.jsx(x,{children:"Blog-Beiträge"}),e.jsxs("div",{className:"relative w-full sm:w-72",children:[e.jsx(O,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(u,{value:ze,onChange:e=>Ue(e.target.value),placeholder:"Beiträge filtern…",className:"pl-8 h-9","aria-label":"Beiträge filtern"}),ze&&e.jsx("button",{type:"button",onClick:()=>Ue(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":"Filter löschen",children:e.jsx(K,{className:"h-4 w-4"})})]})]}),e.jsxs(f,{children:[e.jsxs(j,{children:[e.jsx(w,{children:e.jsxs(y,{children:[e.jsx(N,{className:"cursor-pointer",onClick:()=>Ae("title"),children:e.jsxs("div",{className:"flex items-center",children:["Titel ",Ke("title")]})}),e.jsx(N,{className:"cursor-pointer hidden md:table-cell",onClick:()=>Ae("author"),children:e.jsxs("div",{className:"flex items-center",children:["Autor ",Ke("author")]})}),e.jsx(N,{className:"cursor-pointer hidden sm:table-cell",onClick:()=>Ae("event_date"),children:e.jsxs("div",{className:"flex items-center",children:["Event Datum ",Ke("event_date")]})}),e.jsx(N,{className:"cursor-pointer",onClick:()=>Ae("published"),children:e.jsxs("div",{className:"flex items-center",children:["Status ",Ke("published")]})}),e.jsx(N,{className:"cursor-pointer hidden lg:table-cell",onClick:()=>Ae("tag_count"),children:e.jsxs("div",{className:"flex items-center",children:["Tags ",Ke("tag_count")]})}),e.jsx(N,{className:"cursor-pointer hidden lg:table-cell",onClick:()=>Ae("created_at"),children:e.jsxs("div",{className:"flex items-center",children:["Erstellt ",Ke("created_at")]})}),e.jsx(N,{children:"Aktionen"})]})}),e.jsxs(k,{children:[Re.map(t=>{var a;return e.jsxs(y,{children:[e.jsx(B,{className:"font-medium",children:(null==ae?void 0:ae.id)===t.id&&"title"===ae.field?e.jsx(u,{autoFocus:!0,value:le,onChange:e=>re(e.target.value),onBlur:ie,onKeyDown:e=>{"Enter"===e.key&&ie(),"Escape"===e.key&&se(null)},className:"h-8","aria-label":"Titel bearbeiten"}):e.jsx("span",{className:"cursor-text hover:bg-muted/60 rounded px-1 -mx-1 inline-block",title:"Klicken zum Bearbeiten",onClick:()=>ne(t.id,"title",t.title),children:t.title})}),e.jsx(B,{className:"hidden md:table-cell",children:(null==ae?void 0:ae.id)===t.id&&"author"===ae.field?e.jsx(u,{autoFocus:!0,value:le,onChange:e=>re(e.target.value),onBlur:ie,onKeyDown:e=>{"Enter"===e.key&&ie(),"Escape"===e.key&&se(null)},className:"h-8","aria-label":"Autor bearbeiten"}):e.jsx("span",{className:"cursor-text hover:bg-muted/60 rounded px-1 -mx-1 inline-block",title:"Klicken zum Bearbeiten",onClick:()=>ne(t.id,"author",t.author),children:t.author||"-"})}),e.jsx(B,{className:"hidden sm:table-cell",children:e.jsxs("div",{className:"flex items-center gap-1 flex-wrap",children:[(null==ae?void 0:ae.id)===t.id&&"event_date"===ae.field?e.jsx(u,{autoFocus:!0,t
1ype:"date",value:le,onChange:e=>re(e.target.value),onBlur:ie,onKeyDown:e=>{"Enter"===e.key&&ie(),"Escape"===e.key&&se(null)},className:"h-8 w-36","aria-label":"Event-Datum bearbeiten"}):e.jsx("span",{className:"cursor-text hover:bg-muted/60 rounded px-1 -mx-1",title:"Klicken zum Bearbeiten",onClick:()=>ne(t.id,"event_date",t.event_date),children:t.event_date?X(new Date(t.event_date+"T00:00:00"),"dd.MM.yyyy",{locale:Z}):"-"}),e.jsx("span",{className:"text-muted-foreground",children:"–"}),(null==ae?void 0:ae.id)===t.id&&"event_end_date"===ae.field?e.jsx(u,{autoFocus:!0,type:"date",value:le,onChange:e=>re(e.target.value),onBlur:ie,onKeyDown:e=>{"Enter"===e.key&&ie(),"Escape"===e.key&&se(null)},className:"h-8 w-36","aria-label":"Event-Enddatum bearbeiten"}):e.jsx("span",{className:"cursor-text hover:bg-muted/60 rounded px-1 -mx-1",title:"Klicken zum Bearbeiten",onClick:()=>ne(t.id,"event_end_date",t.event_end_date),children:t.event_end_date?X(new Date(t.event_end_date+"T00:00:00"),"dd.MM.yyyy",{locale:Z}):"-"})]})}),e.jsx(B,{children:e.jsx("button",{type:"button",onClick:()=>(async(e,t)=>{try{const{error:a}=await s.from("blog_posts").update({published:!t}).eq("id",e);if(a)throw a;te(a=>a.map(a=>a.id===e?{...a,published:!t}:a)),l.success(t?"Als Entwurf gespeichert":"Veröffentlicht")}catch(a){l.error("Fehler beim Speichern")}})(t.id,t.published),title:"Klicken zum Umschalten","aria-label":"Status umschalten",children:e.jsx(m,{variant:t.published?"default":"secondary",className:"cursor-pointer",children:t.published?"Veröffentlicht":"Entwurf"})})}),e.jsx(B,{className:"hidden lg:table-cell",children:e.jsxs("div",{className:"flex flex-wrap gap-1",children:[null==(a=t.tags)?void 0:a.slice(0,3).map(t=>e.jsx(m,{variant:"outline",className:"text-xs",children:t},t)),t.tags&&t.tags.length>3&&e.jsxs(m,{variant:"outline",className:"text-xs",children:["+",t.tags.length-3]})]})}),e.jsx(B,{className:"hidden lg:table-cell",children:X(new Date(t.created_at),"dd.MM.yyyy",{locale:Z})}),e.jsx(B,{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r,{variant:"outline",size:"sm",onClick:()=>Je(t),children:e.jsx(V,{className:"h-4 w-4"})}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>(async e=>{if(window.confirm("Sind Sie sicher, dass Sie diesen Blog-Beitrag in den Papierkorb verschieben möchten?"))try{const{error:t}=await s.from("blog_posts").update({deleted_at:(new Date).toISOString()}).eq("id",e);if(t)throw t;l.success("Blog-Beitrag in den Papierkorb verschoben"),qe()}catch(t){l.error("Fehler beim Verschieben des Blog-Beitrags")}})(t.id),children:e.jsx(z,{className:"h-4 w-4"})}),e.jsx("a",{href:`/blog/${t.slug}`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(r,{variant:"outline",size:"sm",children:e.jsx(G,{className:"h-4 w-4"})})})]})})]},t.id)}),0===Re.length&&e.jsx(y,{children:e.jsx(B,{colSpan:7,className:"text-center text-muted-foreground py-8",children:"Keine Beiträge gefunden."})})]})]}),!Le&&Ee>ee.length&&e.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between gap-2 pt-4 border-t mt-2",children:[e.jsxs("span",{className:"text-sm text-muted-foreground",children:[ee.length," von ",Ee," Beiträgen geladen"]}),e.jsx(r,{variant:"outline",onClick:async()=>{if(Q){Me(!0);try{const{data:e,error:t}=await s.from("blog_posts").select(Pe).is("deleted_at",null).order("created_at",{ascending:!1}).range(20,Math.max(20,Ee));if(t)throw t;te(t=>{const a=new Set(t.map(e=>e.id));return[...t,...(e||[]).filter(e=>!a.has(e.id))]}),$e(!0)}catch(e){l.error("Fehler beim Nachladen der Beiträge")}finally{Me(!1)}}},disabled:Te,children:Te?"Lädt…":`Alle ${Ee-ee.length} weiteren laden`})]})]})]}),e.jsx(L,{open:ge,onOpenChange:pe,onSelectImage:"content"===xe?et:Ye,onSelectMultiple:"content"===xe?e=>e.forEach(e=>et(e)):void 0,multiSelect:"content"===xe})]})}export{ee as default};
2//# sourceMappingURL=BlogManagement-BHkyq8bH.js.map

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.