PageSourceSearch

https://messtechnik-events.com/assets/redirects-DY8ipoAJ.js

js messtechnik-events.com collected 2026-10-09 22:03:28 UTC 5,981 bytes, 1 lines download raw bytes

1import{r as c,j as e,e as d,I as u,B as h,s as i,t as a,f as o}from"./index-D9jIKKOn.js";import{S as w,a as S,b as A,c as R,d as j}from"./select-CZhZxbf8.js";import{P as E}from"./plus-BCQ5xDR6.js";import{a as C,P as L}from"./power-CHV10F3F.js";import{T as W}from"./trash-2-BEQor2VY.js";import"./index-C6kUatHC.js";import"./index-pcCAjn_P.js";import"./chevron-down-D7TYpaCT.js";import"./chevron-up-BpZEolNT.js";function V(){const[x,f]=c.useState([]),[b,m]=c.useState(!0),[v,g]=c.useState(!0),[s,n]=c.useState({source_path:"",target_url:"",status_code:301,notes:""}),l=async()=>{m(!0);const{data:t}=await i.from("redirects").select("*").order("created_at",{ascending:!1});f(t??[]);const{data:r}=await i.from("admin_settings").select("value").eq("key","auto_redirect_expired_jobs").maybeSingle();g(r?.value===!0),m(!1)};c.useEffect(()=>{l()},[]);const N=async t=>{g(t);const{error:r}=await i.from("admin_settings").upsert({key:"auto_redirect_expired_jobs",value:t},{onConflict:"key"});if(r)return a.error(o(r));a.success(t?"Auto-Redirects aktiviert":"Auto-Redirects deaktiviert")},_=async()=>{if(!s.source_path.startsWith("/"))return a.error("Quelle muss mit / beginnen.");if(!s.target_url)return a.error("Ziel fehlt.");const{error:t}=await i.from("redirects").insert({...s,is_active:!0});if(t)return a.error(o(t));a.success("Weiterleitung angelegt"),n({source_path:"",target_url:"",status_code:301,notes:""}),l()},y=async(t,r)=>{const{error:p}=await i.from("redirects").update({is_active:r}).eq("id",t);if(p)return a.error(o(p));l()},k=async t=>{if(!confirm("Weiterleitung wirklich löschen?"))return;const{error:r}=await i.from("redirects").delete().eq("id",t);if(r)return a.error(o(r));l()};return e.jsxs("div",{className:"space-y-6",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Weiterleitungen"}),e.jsxs("section",{className:"rounded-lg border border-border bg-card p-5",children:[e.jsx("h2",{className:"font-semibold mb-1",children:"Auto-Redirects für abgelaufene Events"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:"Wenn aktiv, wird beim Ablaufen oder Löschen einer Event automatisch ein 301-Redirect von der alten URL auf die zugehörige Kategorie angelegt. Schützt SEO-Rankings."}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:t=>N(t.target.checked),className:"h-4 w-4"}),"Auto-Redirects aktivieren"]})]}),e.jsxs("section",{className:"rounded-lg border border-border bg-card p-5 space-y-3",children:[e.jsxs("h2",{className:"font-semibold flex items-center gap-2",children:[e.jsx(E,{className:"h-4 w-4"})," Neue Weiterleitung"]}),e.jsxs("div",{className:"grid sm:grid-cols-2 lg:grid-cols-4 gap-3",children:[e.jsxs("div",{children:[e.jsx(d,{children:"Quelle"}),e.jsx(u,{placeholder:"/themen oder /r/aktion",value:s.source_path,onChange:t=>n({...s,source_path:t.target.value})})]}),e.jsxs("div",{className:"lg:col-span-2",children:[e.jsx(d,{children:"Ziel-URL"}),e.jsx(u,{placeholder:"/events/messtechnik oder https://…",value:s.target_url,onChange:t=>n({...s,target_url:t.target.value})})]}),e.jsxs("div",{children:[e.jsx(d,{children:"Typ"}),e.jsxs(w,{value:String(s.status_code),onValueChange:t=>n({...s,status_code:parseInt(t)}),children:[e.jsx(S,{children:e.jsx(A,{})}),e.jsxs(R,{children:[e.jsx(j,{value:"301",children:"301 (permanent)"}),e.jsx(j,{value:"302",children:"302 (temporär)"})]})]})]})]}),e.jsxs("div",{children:[e.jsx(d,{children:"Notiz (intern)"}),e.jsx(u,{value:s.notes,onChange:t=>n({...s,notes:t.target.value})})]}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:["Hinweis: Quellpfade unter ",e.jsx("code",{children:"/r/…"})," funktionieren sofort als Vanity-URL. Andere Quellpfade greifen, wenn die Originalseite nicht (mehr) existiert (z. B. abgelaufene Events)."]}),e.jsx(h,{onClick:_,children:"Anlegen"})]}),e.jsxs("section",{className:"rounded-lg border border-border bg-card overflow-hidden",children:[e.jsxs("div",{className:"px-5 py-3 border-b border-border font-semibold",children:["Alle Weiterleitungen (",x.length,")"]}),b?e.jsx("div",{className:"p-8 text-center text-sm text-muted-foreground",children:"Lade …"}):x.length===0?e.jsx("div",{className:"p-8 text-center text-sm text-muted-foreground",children:"Noch keine Weiterleitungen."}):e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-muted text-xs uppercase tracking-wider text-muted-foreground",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-4 py-2",children:"Quelle → Ziel"}),e.jsx("th",{className:"text-left px-4 py-2",children:"Typ"}),e.jsx("th",{className:"text-left px-4 py-2",children:"Hits"}),e.jsx("th",{className:"text-left px-4 py-2",children:"Status"}),e.jsx("th",{className:"text-right px-4 py-2",children:"Aktionen"})]})}),e.jsx("tbody",{children:x.map(t=>e.jsxs("tr",{className:"border-t border-border",children:[e.jsxs("td",{className:"px-4 py-2",children:[e.jsx("code",{className:"text-xs",children:t.source_path}),e.jsxs("div",{className:"text-xs text-muted-foreground truncate max-w-md",children:["→ ",t.target_url]}
1),t.notes&&e.jsx("div",{className:"text-[10px] text-muted-foreground italic",children:t.notes})]}),e.jsx("td",{className:"px-4 py-2",children:t.status_code}),e.jsx("td",{className:"px-4 py-2 text-xs",children:t.hit_count.toLocaleString("de-DE")}),e.jsx("td",{className:"px-4 py-2",children:e.jsx("span",{className:`inline-block px-2 py-0.5 rounded text-xs ${t.is_active?"bg-success/15 text-success":"bg-muted text-muted-foreground"}`,children:t.is_active?"Aktiv":"Inaktiv"})}),e.jsxs("td",{className:"px-4 py-2 text-right",children:[e.jsx(h,{size:"sm",variant:"ghost",onClick:()=>y(t.id,!t.is_active),children:t.is_active?e.jsx(C,{className:"h-4 w-4"}):e.jsx(L,{className:"h-4 w-4"})}),e.jsx(h,{size:"sm",variant:"ghost",onClick:()=>k(t.id),children:e.jsx(W,{className:"h-4 w-4 text-destructive"})})]})]},t.id))})]})]})]})}export{V as component};

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.