PageSourceSearch

https://herpowerapp.com/assets/AdminBetaRequests-Blzm_T3e.js

js herpowerapp.com collected 2026-10-09 22:04:14 UTC 9,737 bytes, 6 lines download raw bytes

1import{c as P,u as H,K as I,b as K,g as O,r as h,s as i,j as e,a2 as Q,d as q,C as m,a as u,aS as R,y as C,z as k,I as A,B as l,h as W}from"./index-DO0ZNUzu.js";import{A as X}from"./AdminNavigation-BALrVg_C.js";import{C as j}from"./circle-check-big-DrR00IgM.js";import{C as b}from"./circle-x-DzZoUJG4.js";import{U as E}from"./user-Dd_SXVXr.js";import{M as G}from"./mail-rAjwM4rG.js";import{C as J}from"./calendar-Dodd1r6N.js";import{R as V}from"./rotate-ccw-BQUF485p.js";import{T as Y}from"./trash-2-VtFXnL4x.js";import{f as B}from"./format-Cn6ElKJ8.js";import"./bell-Dc_RYjMz.js";import"./chart-column-RBik8eZM.js";import"./settings-cLgs3mni.js";import"./en-US-CXXYYhpC.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const Z=P("UserMinus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]),xe=()=>{H();const{isAdmin:x,loading:f}=I(),v=K(),{toast:a}=O(),[d,M]=h.useState([]),[D,g]=h.useState(!0),[n,r]=h.useState(null);h.useEffect(()=>{document.title="Beta Access Requests – Admin",!f&&!x&&v("/admin/dashboard")},[x,f,v]),h.useEffect(()=>{x&&c()},[x]);const c=async()=>{try{g(!0);const{data:s,error:t}=await i.from("profiles").select("id, user_id, display_name, beta_request_status, beta_request_date, beta_access_requested, is_beta_user").or("beta_access_requested.eq.true,is_beta_user.eq.true").order("beta_request_date",{ascending:!1});if(t)throw t;const p=await Promise.all((s||[]).map(async o=>{var w;const{data:L}=await i.auth.admin.getUserById(o.user_id);return{...o,email:((w=L.user)==null?void 0:w.email)||"Unknown"}}));M(p)}catch(s){console.error("Error fetching beta requests:",s),a({title:"Error",description:"Failed to load beta requests",variant:"destructive"})}finally{g(!1)}},y=async s=>{try{r(s);const t=d.find(o=>o.user_id===s),{error:p}=await i.from("profiles").update({is_beta_user:!0,beta_request_status:"approved",beta_approved_at:new Date().toISOString()}).eq("user_id",s);if(p)throw p;if(t!=null&&t.email)try{await i.functions.invoke("send-beta-welcome-email",{body:{email:t.email,displayName:t.display_name||"Queen"}}),console.log("Beta welcome email sent to:",t.email)}catch(o){console.error("Failed to send welcome email:",o)}a({title:"Request Approved",description:"User has been granted beta access and welcome email sent"}),await c()}catch(t){a({title:"Error",description:t.message||"Failed to approve request",variant:"destructive"})}finally{r(null)}},N=async s=>{try{r(s);const{error:t}=await i.from("profiles").update({beta_request_status:"denied"}).eq("user_id",s);if(t)throw t;a({title:"Request Denied",description:"Beta access request has been denied"}),await c()}catch(t){a({title:"Error",description:t.message||"Failed to deny request",variant:"destructive"})}finally{r(null)}},U=async s=>{try{r(s);const{error:t}=await i.from("profiles").update({beta_access_requested:!1,beta_request_status:"none",beta_request_date:null}).eq("user_id",s);if(t)throw t;a({title:"Request Reset",description:"User can now apply for beta access again"}),await c()}catch(t){a({title:"Error",description:t.message||"Failed to reset request",variant:"destructive"})}finally{r(null)}},S=async s=>{try{r(s);const{error:t}=await i.from("profiles").update({is_beta_user:!1,beta_request_status:"revoked"}).eq("user_id",s);if(t)throw t;a({title:"Access Revoked",description:"Beta access has been removed from user"}),await c()}catch(t){a({title:"Error",description:t.message||"Failed to revoke access",variant:"destructive"})}finally{r(null)}},F=async s=>{if(confirm("Remove this entry from the list? This clears the request but does not change their beta access."))try{r(s);const{error:t}=await i.from("profiles").update({beta_access_requested:!1,beta_request_status:"none",beta_request_date:null}).eq("user_id",s);if(t)throw t;a({title:"Entry Removed",description:"The request has been cleared from the list"}),await c()}catch(t){a({title:"Error",description:t.message||"Failed to remove entry",variant:"destructive"})}finally{r(null)}};if(f||D)return e.jsx(Q,{});if(!x)return null;const _=d.filter(s=>s.beta_request_status==="pending"&&!s.is_beta_user),z=d.filter(s=>s.is_beta_user),T=d.filter(s=>s.beta_request_status==="denied"&&!s.is_beta_user);return e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(X,{}),e.jsxs("div",{className:"container mx-auto px-4 py-8 max-w-6xl",children:[e.jsx("div",{className:"mb-8",children:e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-12 h-12 rounded-2xl bg-gradient-to-br from-primary/20 to-accent/20 flex items-center justify-center",children:e.jsx(q,{className:"w-6 h-6 text-primary"})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Beta Access Requests"}),e.jsx("p",{className:"text-muted-foreground",children:"Manage user requests for beta testing access"})]})]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-8",children:[e.jsx(m,{children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Pending"}),e.jsx("p",{className:"text-2xl font-bold",children:_.length})]}),e.jsx(R,{className:"h-8 w-8 text-yellow-500"})]})})}),e.jsx(m,{children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Active Beta Users"}),e.jsx("p",{className:"text-2xl font-bold",children:z.length})]}),e.jsx(j,{className:"h-8 w-8 text-green-500"})]})})}),e.jsx(m,{children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Denied"}),e.jsx("p",{className:"text-2xl font-bold",children:T.length})]}),e.jsx(b,{className:"h-8 w-8 text-red-500"})]})})})]}),_.length>0&&e.jsxs(m,{className:"mb-6",children:[e.jsxs(C,{children:[e.jsxs(k,{className:"flex items-center gap-2",children:[e.jsx(R,{className:"h-5 w-5 text-yellow-500"}),"Pending Requests"]}),e.jsx(A,{children:"Review and approve or deny beta access requests"})]}),e.jsx(u,{className:"space-y-4",children:_.map(s=>e.jsx(m,{className:"border-l-4 border-l-yellow-500",children:e.jsx(u,{className:"pt-6",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(E,{className:"h-5 w-5 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-semibold",children:s.display_name||"No name set"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(G,{className:"h-4 w-4"}),s.email]})]})]}),s.beta_request_date&&e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(J,{className:"h-4 w-4"}),"Requested on ",B(new Date(s.beta_request_date),"MMM dd, yyyy")]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(l,{onClick:()=>
6y(s.user_id),disabled:n===s.user_id,className:"gap-2",children:[e.jsx(j,{className:"h-4 w-4"}),"Approve"]}),e.jsxs(l,{onClick:()=>N(s.user_id),disabled:n===s.user_id,variant:"destructive",className:"gap-2",children:[e.jsx(b,{className:"h-4 w-4"}),"Deny"]})]})]})})},s.id))})]}),e.jsxs(m,{children:[e.jsxs(C,{children:[e.jsx(k,{children:"All Requests"}),e.jsx(A,{children:"Complete history of beta access requests"})]}),e.jsx(u,{children:d.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(q,{className:"h-12 w-12 text-muted-foreground mx-auto mb-4"}),e.jsx("p",{className:"text-muted-foreground",children:"No beta access requests yet"})]}):e.jsx("div",{className:"space-y-3",children:d.map(s=>e.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg border",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[e.jsx(E,{className:"h-5 w-5 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:s.display_name||"No name"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s.email})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[s.beta_request_date&&e.jsx("p",{className:"text-sm text-muted-foreground",children:B(new Date(s.beta_request_date),"MMM dd, yyyy")}),e.jsx(W,{variant:s.is_beta_user?"default":s.beta_request_status==="pending"?"secondary":"destructive",children:s.is_beta_user?"active":s.beta_request_status}),s.beta_request_status==="pending"&&!s.is_beta_user&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx(l,{size:"sm",onClick:()=>y(s.user_id),disabled:n===s.user_id,children:e.jsx(j,{className:"h-4 w-4"})}),e.jsx(l,{size:"sm",variant:"destructive",onClick:()=>N(s.user_id),disabled:n===s.user_id,children:e.jsx(b,{className:"h-4 w-4"})})]}),s.beta_request_status==="denied"&&!s.is_beta_user&&e.jsx(l,{size:"sm",variant:"outline",onClick:()=>U(s.user_id),disabled:n===s.user_id,children:e.jsx(V,{className:"h-4 w-4"})}),s.is_beta_user&&e.jsx(l,{size:"sm",variant:"destructive",onClick:()=>S(s.user_id),disabled:n===s.user_id,title:"Revoke beta access",children:e.jsx(Z,{className:"h-4 w-4"})}),s.beta_request_status!=="pending"&&e.jsx(l,{size:"sm",variant:"outline",onClick:()=>F(s.user_id),disabled:n===s.user_id,title:"Remove entry from list",children:e.jsx(Y,{className:"h-4 w-4"})})]})]},s.id))})})]})]})]})};export{xe 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.