PageSourceSearch

https://bowtiesports.com/assets/AdPackageManagement-Ckq_nT_h.js

js bowtiesports.com collected 2026-10-07 02:29:17 UTC 12,301 bytes, 1 lines download raw bytes

1import{r as _,j as e}from"./react-vendor-DUhHROXo.js";import{A as Z}from"./AdminLayout-4AAuHeAU.js";import{_ as ee,J as se,o as x,D as B,q as D,s as F,t as k,aP as E}from"./index-BLtzf0SR.js";import{u as w}from"./useMutation-BXp6BKyU.js";import{s as f}from"./client-DTel1CZI.js";import{C as u,b as ae,c as te,a as ie}from"./card-9IoFUltb.js";import{I as p}from"./input-RFokm5kN.js";import{L as n}from"./label-B2yiss_Q.js";import{B as T}from"./badge-BsE4KYIf.js";import{T as M}from"./textarea-Da4-oaTC.js";import{S as q,a as z,b as I,c as R,d as i}from"./select-CMAo_7oa.js";import{S as V}from"./switch-DacJ_cba.js";import{T as le,a as re,b as y,c as b}from"./tabs-B9G-WuXr.js";import{u as L}from"./index-Cx0UdoxP.js";import{P as ne}from"./plus-Db1qFqHY.js";import{D as ce}from"./dollar-sign-D3lTBfQm.js";import{P as de}from"./pencil-C2cyk8cg.js";import"./router-vendor-Dz9PdDzH.js";import"./NavLink-CsyG-eHO.js";import"./scroll-area-BdyOmc9o.js";import"./index-BdQq_4o_.js";import"./collapsible-BAD8kbtc.js";import"./index-CMI-ZfmW.js";import"./arrow-left-CRb8P6iH.js";import"./globe-CQ83QW2m.js";import"./users-CIwSfVhi.js";import"./activity-CwFToTs3.js";import"./list-todo-BR3jv1RJ.js";import"./calendar-BDETTnfZ.js";import"./users-round-CCw5yxW7.js";import"./radio-BQgeDg5T.js";import"./clapperboard-BvstouST.js";import"./clipboard-list-CQJ-vJ2y.js";import"./image-arBWrt3y.js";import"./folder-open-CIWhCFhy.js";import"./message-square-BDdDilNB.js";import"./ticket-l9bl0kcm.js";import"./megaphone-DpQsxotQ.js";import"./package-DKB1lvtO.js";import"./circle-user-BeB3uaA1.js";import"./folder-kanban-B8jlMC6s.js";import"./settings-Baim_Eei.js";import"./briefcase-CdSp4ViD.js";import"./chart-line-ohAz7u_s.js";import"./index-O12prPmO.js";import"./chevron-up-B89bkR-F.js";const oe={bronze:"bg-amber-700 text-white",silver:"bg-slate-400 text-white",gold:"bg-yellow-500 text-black",platinum:"bg-gradient-to-r from-slate-600 to-slate-400 text-white",custom:"bg-muted text-muted-foreground",single:"bg-sky-600 text-white",a_la_carte:"bg-violet-600 text-white"},me={bronze:"🥉 Bronze",silver:"🥈 Silver",gold:"🥇 Gold",platinum:"💎 Platinum",custom:"Add-On",single:"Single Buy",a_la_carte:"À La Carte"},xe={one_time:"One-Time",weekly:"Per Week",monthly:"Per Month",annual:"Per Year"};function ls(){const C=ee(),[a,l]=_.useState(null),[Q,h]=_.useState(!1),[K,$]=_.useState({}),[t,c]=_.useState({name:"",description:"",tier:"custom",total_price:"",discount_pct:"0",billing_period:"monthly"}),{data:o=[]}=se({queryKey:["admin_ad_packages"],queryFn:async()=>{const{data:s}=await f.from("ad_packages").select("*").order("tier").order("total_price",{ascending:!0});return s||[]}}),G=w({mutationFn:async({id:s,active:r})=>{const{error:d}=await f.from("ad_packages").update({is_active:r}).eq("id",s);if(d)throw d},onSuccess:()=>{C.invalidateQueries({queryKey:["admin_ad_packages"]}),L.success("Package updated")}}),A=w({mutationFn:async s=>{const{error:r}=await f.from("ad_packages").update({name:s.name,description:s.description,tier:s.tier,total_price:s.total_price,discount_pct:s.discount_pct,billing_period:s.billing_period}).eq("id",s.id);if(r)throw r},onSuccess:()=>{C.invalidateQueries({queryKey:["admin_ad_packages"]}),L.success("Package saved"),l(null)}}),H=w({mutationFn:async()=>{const{error:s}=await f.from("ad_packages").insert({name:t.name,description:t.description||null,tier:t.tier,total_price:parseFloat(t.total_price)||0,discount_pct:parseFloat(t.discount_pct)||0,billing_period:t.billing_period});if(s)throw s},onSuccess:()=>{C.invalidateQueries({queryKey:["admin_ad_packages"]}),L.success("Package created"),h(!1),c({name:"",description:"",tier:"custom",total_price:"",discount_pct:"0",billing_period:"monthly"})}}),P=["bronze","silver","gold","platinum"],g=o.filter(s=>P.includes(s.tier)).sort((s,r)=>P.indexOf(s.tier)-P.indexOf(r.tier)),j=o.filter(s=>s.tier==="single"),v=o.filter(s=>s.tier==="a_la_carte"),S=o.filter(s=>s.tier==="custom"),W=o.filter(s=>s.is_active).length,Y=s=>xe[s]||s,N=s=>{const r=["bronze","silver","gold","platinum"].includes(s.tier)&&s.billing_period==="annual",d=K[s.id]||!1,J=r&&d?(Number(s.total_price)/12).toFixed(2):Number(s.total_price)>
10?Number(s.total_price).toLocaleString():"Variable",U=r?d?"/mo":"/yr":s.billing_period==="one_time"?"":`/${s.billing_period==="weekly"?"wk":s.billing_period==="annual"?"yr":"mo"}`;return e.jsxs(u,{className:`relative ${s.is_active?"":"opacity-60"}`,children:[e.jsxs(ae,{className:"pb-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(T,{className:oe[s.tier]||"",children:me[s.tier]||s.tier}),r?e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[10px] text-muted-foreground",children:d?"Per Month":"Per Year"}),e.jsx(V,{checked:d,onCheckedChange:m=>$(X=>({...X,[s.id]:m})),className:"scale-75"})]}):e.jsx(T,{variant:"outline",className:"text-[10px]",children:Y(s.billing_period)})]}),e.jsx(V,{checked:!!s.is_active,onCheckedChange:m=>G.mutate({id:s.id,active:m})})]}),e.jsx(te,{className:"text-base mt-2",children:s.name})]}),e.jsxs(ie,{children:[e.jsxs("p",{className:"text-2xl font-bold flex items-center gap-1",children:[e.jsx(ce,{className:"h-5 w-5"}),J,e.jsx("span",{className:"text-xs font-normal text-muted-foreground",children:U})]}),Number(s.discount_pct)>0&&e.jsxs("p",{className:"text-xs text-emerald-600 mt-1",children:[s.discount_pct,"% volume discount"]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mt-2 line-clamp-3",children:s.description}),s.included_placements&&Array.isArray(s.included_placements)&&e.jsx("div",{className:"flex flex-wrap gap-1 mt-3",children:s.included_placements.map(m=>e.jsx(T,{variant:"outline",className:"text-[9px]",children:m.replace(/_/g," ")},m))}),e.jsxs(x,{variant:"ghost",size:"sm",className:"mt-3 w-full",onClick:()=>l(s),children:[e.jsx(de,{className:"h-3 w-3 mr-1"}),"Edit"]})]})]},s.id)},O=()=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Tier"}),e.jsxs(q,{value:a?a.tier:t.tier,onValueChange:s=>a?l({...a,tier:s}):c({...t,tier:s}),children:[e.jsx(z,{children:e.jsx(I,{})}),e.jsxs(R,{children:[e.jsx(i,{value:"bronze",children:"Bronze"}),e.jsx(i,{value:"silver",children:"Silver"}),e.jsx(i,{value:"gold",children:"Gold"}),e.jsx(i,{value:"platinum",children:"Platinum"}),e.jsx(i,{value:"single",children:"Single Buy"}),e.jsx(i,{value:"a_la_carte",children:"À La Carte"}),e.jsx(i,{value:"custom",children:"Add-On"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Billing Period"}),e.jsxs(q,{value:a?a.billing_period:t.billing_period,onValueChange:s=>a?l({...a,billing_period:s}):c({...t,billing_period:s}),children:[e.jsx(z,{children:e.jsx(I,{})}),e.jsxs(R,{children:[e.jsx(i,{value:"one_time",children:"One-Time"}),e.jsx(i,{value:"weekly",children:"Weekly"}),e.jsx(i,{value:"monthly",children:"Monthly"}),e.jsx(i,{value:"annual",children:"Annual"})]})]})]})]});return e.jsxs(Z,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Ad Packages"}),e.jsx("p",{className:"text-muted-foreground",children:"Manage sponsorship tiers, à la carte items, and single-ad buys"})]}),e.jsxs(x,{onClick:()=>h(!0),children:[e.jsx(ne,{className:"h-4 w-4 mr-2"}),"New Package"]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-4",children:[e.jsxs(u,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Total Packages"}),e.jsx("p",{className:"text-2xl font-bold",children:o.length})]}),e.jsxs(u,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Active"}),e.jsx("p",{className:"text-2xl font-bold text-emerald-600",children:W})]}),e.jsxs(u,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Tiered"}),e.jsx("p",{className:"text-2xl font-bold",children:g.length})]}),e.jsxs(u,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"À La Carte"}),e.jsx("p",{className:"text-2xl font-bold",children:v.length})]}),e.jsxs(u,{className:"p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Single Buys"}),e.jsx("p",{className:"text-2xl font-bold",children:j.length})]})]}),e.jsxs(le,{defaultValue:"tiers",children:[e.jsxs(re,{children:[e.jsxs(y,{value:"tiers",children:["Sponsorship Tiers (",g.length,")"]}),e.jsxs(y,{value:"single",children:["Single Buys (",j.length,")"]}),e.jsxs(y,{value:"alacarte",children:["À La Carte (",v.length,")"]}),e.jsxs(y,{value:"addons",children:["Add-Ons (",S.length,")"]})]}),e.jsxs(b,{value:"tiers",className:"mt-4",children:[e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4",children:g.map(N)}),g.length===0&&e.jsx("p",{className:"text-muted-foreground text-sm py-8 text-center",children:"No tiered packages yet."})]}),e.jsxs(b,{value:"single",className:"mt-4",children:[e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:j.map(N)}),j.length===0&&e.jsx("p",{className:"text-muted-foreground text-sm py-8 text-center",children:"No single-buy packages yet."})]}),e.jsxs(b,{value:"alacarte",className:"mt-4",children:[e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:v.map(N)}),v.length===0&&e.jsx("p",{className:"text-muted-foreground text-sm py-8 text-center",children:"No à la carte items 
1yet."})]}),e.jsxs(b,{value:"addons",className:"mt-4",children:[e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",children:S.map(N)}),S.length===0&&e.jsx("p",{className:"text-muted-foreground text-sm py-8 text-center",children:"No add-ons yet."})]})]})]}),e.jsx(B,{open:!!a,onOpenChange:s=>!s&&l(null),children:e.jsxs(D,{children:[e.jsx(F,{children:e.jsx(k,{children:"Edit Package"})}),a&&e.jsxs("div",{className:"grid gap-4 py-2",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Name"}),e.jsx(p,{value:a.name,onChange:s=>l({...a,name:s.target.value})})]}),e.jsx("div",{className:"grid grid-cols-2 gap-3",children:O()}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Price ($)"}),e.jsx(p,{type:"number",value:a.total_price,onChange:s=>l({...a,total_price:parseFloat(s.target.value)||0})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Discount (%)"}),e.jsx(p,{type:"number",value:a.discount_pct||0,onChange:s=>l({...a,discount_pct:parseFloat(s.target.value)||0})})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Description"}),e.jsx(M,{value:a.description||"",onChange:s=>l({...a,description:s.target.value})})]})]}),e.jsxs(E,{children:[e.jsx(x,{variant:"outline",onClick:()=>l(null),children:"Cancel"}),e.jsx(x,{onClick:()=>a&&A.mutate(a),disabled:A.isPending,children:"Save"})]})]})}),e.jsx(B,{open:Q,onOpenChange:h,children:e.jsxs(D,{children:[e.jsx(F,{children:e.jsx(k,{children:"Create Package"})}),e.jsxs("div",{className:"grid gap-4 py-2",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Name *"}),e.jsx(p,{value:t.name,onChange:s=>c({...t,name:s.target.value}),placeholder:"e.g. Single Mid-Roll"})]}),e.jsx("div",{className:"grid grid-cols-2 gap-3",children:O()}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Price ($)"}),e.jsx(p,{type:"number",value:t.total_price,onChange:s=>c({...t,total_price:s.target.value})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Discount (%)"}),e.jsx(p,{type:"number",value:t.discount_pct,onChange:s=>c({...t,discount_pct:s.target.value})})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(n,{children:"Description"}),e.jsx(M,{value:t.description,onChange:s=>c({...t,description:s.target.value})})]})]}),e.jsxs(E,{children:[e.jsx(x,{variant:"outline",onClick:()=>h(!1),children:"Cancel"}),e.jsx(x,{onClick:()=>H.mutate(),disabled:!t.name||!t.total_price,children:"Create"})]})]})})]})}export{ls 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.