PageSourceSearch

https://slantapp.ai/assets/MRaaSAdminPage-B17ys93_.js

js slantapp.ai collected 2026-10-05 15:06:01 UTC 11,532 bytes, 1 lines download raw bytes

1import{r as u,c as J,W as D,F as I,j as e,B as R,I as M,U as X,O as d,a8 as Y,a4 as Z,a9 as ee,b8 as se,C as U,K as te,N as ae,aC as re,a as V,q as L,Q as E}from"./index-tc5-nNLC.js";import{T as k,a as $,b as h,c as t,d as F,e as a}from"./table-Azv99rWQ.js";import{S as w,a as C,b as S,c as y,d as r}from"./select-Bsa-6vNv.js";import{A as le,a as ie,b as ne,c as de,d as ce,e as oe,f as xe,g as me}from"./alert-dialog-BhS3-18U.js";import{T as ue,a as he,b as H,c as q}from"./tabs-D2OfY7RH.js";import{E as A}from"./external-link-wMXh6D17.js";import{C as T}from"./circle-check-B8vEXYAG.js";import{C as K}from"./circle-x-BO-W5S7j.js";import"./index-C-y5wYFI.js";import"./chevron-down-DOFZ7rzv.js";import"./chevron-up-1gTexUQn.js";const B={pending:{label:"Pending",color:"bg-yellow-100 text-yellow-800 border-yellow-200",icon:M},approved:{label:"Approved",color:"bg-blue-100 text-blue-800 border-blue-200",icon:T},converted:{label:"Converted",color:"bg-emerald-100 text-emerald-800 border-emerald-200",icon:T},rejected:{label:"Rejected",color:"bg-red-100 text-red-800 border-red-200",icon:K}};function je(l,c){return new Intl.NumberFormat("en-US",{style:"currency",currency:c||"USD",minimumFractionDigits:0}).format(l/100)}function pe(l){return new Date(l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function j({label:l,value:c,icon:o}){return e.jsx(U,{children:e.jsxs(V,{className:"flex items-center gap-4 pt-6",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-emerald-100 flex items-center justify-center flex-shrink-0",children:e.jsx(o,{className:"w-5 h-5 text-emerald-600"})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold",children:c}),e.jsx("div",{className:"text-xs text-muted-foreground",children:l})]})]})})}function Pe(){const[l,c]=u.useState(""),[o,O]=u.useState("all"),[p,z]=u.useState("all"),[g,v]=u.useState(null),{toast:x}=J(),{data:i=[],isLoading:Q}=D({queryKey:["/api/mrr/waitlist"]}),{data:P=[],isLoading:_}=D({queryKey:["/api/mrr/admin/tiers"]}),G=I({mutationFn:({id:s,status:n})=>E("PATCH",`/api/mrr/admin/waitlist/${s}`,{status:n}),onSuccess:()=>{L.invalidateQueries({queryKey:["/api/mrr/waitlist"]}),x({title:"Status updated"})},onError:s=>x({title:"Error",description:s.message,variant:"destructive"})}),W=I({mutationFn:s=>E("DELETE",`/api/mrr/admin/waitlist/${s}`),onSuccess:()=>{L.invalidateQueries({queryKey:["/api/mrr/waitlist"]}),v(null),x({title:"Entry removed"})},onError:s=>x({title:"Error",description:s.message,variant:"destructive"})}),f=i.filter(s=>{const n=!l||s.name.toLowerCase().includes(l.toLowerCase())||s.email.toLowerCase().includes(l.toLowerCase())||(s.companyOrHandle||"").toLowerCase().includes(l.toLowerCase()),b=o==="all"||s.role===o,N=p==="all"||s.status===p;return n&&b&&N}),m={pending:i.filter(s=>s.status==="pending").length,approved:i.filter(s=>s.status==="approved").length,converted:i.filter(s=>s.status==="converted").length,rejected:i.filter(s=>s.status==="rejected").length};return e.jsxs("div",{className:"max-w-7xl mx-auto px-6 py-8 space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"MRaaS Admin"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Slant Majority Report Service — waitlist and tier management"})]}),e.jsx("a",{href:"/mrr",target:"_blank",rel:"noopener noreferrer",children:e.jsxs(R,{variant:"outline",size:"sm",className:"gap-2","data-testid":"link-view-page",children:[e.jsx(A,{className:"w-4 h-4"})," View landing page"]})})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[e.jsx(j,{label:"Pending",value:m.pending,icon:M}),e.jsx(j,{label:"Approved",value:m.approved,icon:T}),e.jsx(j,{label:"Converted",value:m.converted,icon:X}),e.jsx(j,{label:"Rejected",value:m.rejected,icon:K})]}),e.jsxs(ue,{defaultValue:"waitlist",children:[e.jsxs(he,{children:[e.jsxs(H,{value:"waitlist","data-testid":"tab-waitlist",children:["Waitlist ",e.jsx(d,{variant:"secondary",className:"ml-2",children:i.length})]}),e.jsxs(H,{value:"tiers","data-testid":"tab-tiers",children:["Stripe Tiers ",e.jsx(d,{variant:"secondary",className:"ml-2",children:P.length})]})]}
1),e.jsxs(q,{value:"waitlist",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("div",{className:"relative flex-1 min-w-[200px]",children:[e.jsx(Y,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(Z,{placeholder:"Search name, email, handle…",value:l,onChange:s=>c(s.target.value),className:"pl-9","data-testid":"input-search"})]}),e.jsxs(w,{value:o,onValueChange:O,children:[e.jsx(C,{className:"w-[150px]","data-testid":"select-role",children:e.jsx(S,{placeholder:"All roles"})}),e.jsxs(y,{children:[e.jsx(r,{value:"all",children:"All roles"}),e.jsx(r,{value:"creator",children:"Creator"}),e.jsx(r,{value:"brand",children:"Brand"}),e.jsx(r,{value:"agency",children:"Agency"}),e.jsx(r,{value:"merchant",children:"Merchant"})]})]}),e.jsxs(w,{value:p,onValueChange:z,children:[e.jsx(C,{className:"w-[150px]","data-testid":"select-status",children:e.jsx(S,{placeholder:"All statuses"})}),e.jsxs(y,{children:[e.jsx(r,{value:"all",children:"All statuses"}),e.jsx(r,{value:"pending",children:"Pending"}),e.jsx(r,{value:"approved",children:"Approved"}),e.jsx(r,{value:"converted",children:"Converted"}),e.jsx(r,{value:"rejected",children:"Rejected"})]})]})]}),Q?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:"Loading…"}):f.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:"No entries match your filters"}):e.jsx("div",{className:"rounded-xl border overflow-hidden",children:e.jsxs(k,{children:[e.jsx($,{children:e.jsxs(h,{children:[e.jsx(t,{children:"Name"}),e.jsx(t,{children:"Email"}),e.jsx(t,{children:"Role"}),e.jsx(t,{children:"Company / Handle"}),e.jsx(t,{children:"Joined"}),e.jsx(t,{children:"Status"}),e.jsx(t,{className:"text-right",children:"Actions"})]})}),e.jsx(F,{children:f.map(s=>{const n=B[s.status]||B.pending,b=n.icon;return e.jsxs(h,{"data-testid":`row-waitlist-${s.id}`,children:[e.jsxs(a,{className:"font-medium",children:[e.jsx("div",{children:s.name}),s.message&&e.jsx("div",{className:"text-xs text-muted-foreground mt-0.5 max-w-[180px] truncate",title:s.message,children:s.message})]}),e.jsx(a,{className:"text-sm text-muted-foreground",children:e.jsx("a",{href:`mailto:${s.email}`,className:"hover:underline",children:s.email})}),e.jsx(a,{children:e.jsx(d,{variant:"outline",className:"capitalize text-xs",children:s.role||"—"})}),e.jsx(a,{className:"text-sm text-muted-foreground",children:s.companyOrHandle||"—"}),e.jsx(a,{className:"text-sm text-muted-foreground whitespace-nowrap",children:pe(s.createdAt)}),e.jsx(a,{children:e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs border font-medium ${n.color}`,children:[e.jsx(b,{className:"w-3 h-3"}),n.label]})}),e.jsx(a,{children:e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsxs(w,{value:s.status,onValueChange:N=>G.mutate({id:s.id,status:N}),children:[e.jsx(C,{className:"h-8 w-[110px] text-xs","data-testid":`select-status-${s.id}`,children:e.jsx(S,{})}),e.jsxs(y,{children:[e.jsx(r,{value:"pending",children:"Pending"}),e.jsx(r,{value:"approved",children:"Approved"}),e.jsx(r,{value:"converted",children:"Converted"}),e.jsx(r,{value:"rejected",children:"Rejected"})]})]}),e.jsx(R,{variant:"ghost",size:"icon",className:"h-8 w-8 text-destructive hover:text-destructive",onClick:()=>v(s.id),"data-testid":`button-delete-${s.id}`,children:e.jsx(ee,{className:"w-3.5 h-3.5"})})]})})]},s.id)})})]})}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[f.length," of ",i.length," entries shown"]})]}),e.jsxs(q,{value:"tiers",className:"mt-4",children:[_?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:"Loading…"}):e.jsx("div",{className:"rounded-xl border overflow-hidden",children:e.jsxs(k,{children:[e.jsx($,{children:e.jsxs(h,{children:[e.jsx(t,{children:"Tier"}),e.jsx(t,{children:"Audience"}),e.jsx(t,{children:"Price"}),e.jsx(t,{children:"Billing"}),e.jsx(t,{children:"Stripe Product ID"}),e.jsx(t,{children:"Stripe Price ID"}),e.jsx(t,{children:"Status"})]})}),e.jsx(F,{children:P.map(s=>e.jsxs(h,{"data-testid":`row-tier-${s.slug}`,children:[e.jsxs(a,{children:[e.jsx("div",{className:"font-medium",children:s.name}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s.slug})]}),e.jsx(a,{children:e.jsx(d,{variant:"outline",className:"capitalize text-xs",children:s.audience})}),e.jsx(a,{className:"font-semibold",children:je(s.priceCents,s.currency)}),e.jsx(a,{className:"text-sm text-muted-foreground",children:s.isRecurring?`/${s.billingInterval}`:"one-time"}),e.jsx(a,{children:s.stripeProductId?e.jsxs("a",{href:`https://dashboard.stripe.com/products/${s.stripeProductId}`,target:"_blank",rel:"noopener noreferrer",className:"text-xs font-mono text-blue-600 hover:underline flex items-center gap-1","data-testid":`link-product-${s.slug}`,children:[s.stripeProductId.slice(0,22),"…",e.jsx(A,{className:"w-3 h-3"})]}):e.jsxs("span",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[e.jsx(se,{className:"w-3 h-3 animate-spin"})," Pending sync"]})}),e.jsx(a,{children:s.stripePriceId?e.jsxs("a",{href:`https://dashboard.stripe.com/prices/${s.stripePriceId}`,target:"_blank",rel:"noopener noreferrer",className:"text-xs font-mono text-blue-600 hover:underline flex items-center gap-1","data-testid":`link-price-${s.slug}`,children:[s.stripePriceId.slice(0,30),"…",e.jsx(A,{className:"w-3 h-3"})]}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})}),e.jsx(a,{children:e.jsx(d,{variant:s.isActive?"default":"secondary",className:s.isActive?"bg-emerald-100 text-emerald-800 border-emerald-200":"",children:s.isActive?"Active":"Inactive"})})]},s.id))})]})}),e.jsxs(U,{className:"mt-6",children:[e.jsx(te,{children:e.jsxs(ae,{className:"text-base flex items-center gap-2",children:[e.jsx(re,{className:"w-4 h-4"}),"Presale → MRaaS access mapping"]})}),e.jsx(V,{children:e.jsx("div",{className:"grid sm:grid-cols-3 gap-4",children:[{tier:"Tier A — Starter",level:"settlement",desc:"Settlement reports per activation only"},{tier:"Tier B — Growth",level:"analytics",desc:"Historical trends and comparisons"},{tier:"Tier C — Enterprise",level:"full",desc:"Full MRaaS suite included"}].map(s=>e.jsxs("div",{className:"p-4 rounded-xl border bg-muted/30",children:[e.jsx("div",{className:"font-semibold text-sm mb-1",children:s.tier}),e.jsx(d,{variant:"outline",className:"text-xs mb-2",children:s.level}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.desc})]},s.tier))})})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:"Stripe Product and Price IDs link directly to your Str
1ipe dashboard. Sync runs automatically on server startup."})]})]}),e.jsx(le,{open:g!==null,onOpenChange:s=>!s&&v(null),children:e.jsxs(ie,{children:[e.jsxs(ne,{children:[e.jsx(de,{children:"Remove waitlist entry?"}),e.jsx(ce,{children:"This permanently removes the entry from the waitlist. This cannot be undone."})]}),e.jsxs(oe,{children:[e.jsx(xe,{children:"Cancel"}),e.jsx(me,{onClick:()=>g!==null&&W.mutate(g),className:"bg-destructive hover:bg-destructive/90","data-testid":"button-confirm-delete",children:"Remove"})]})]})})]})}export{Pe 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.