PageSourceSearch

https://solarintelligence.ai/assets/AdminContactRequestsPage-B1TwfuiW.js

js solarintelligence.ai collected 2026-10-05 12:51:10 UTC 11,313 bytes, 9 lines download raw bytes

1import{j as e}from"./state-DKBP_IF5.js";import{j as M,r as n}from"./react-vendor-Unhn4PzF.js";import{t as N}from"./ui-Dw3dkPmY.js";import{e as w}from"./index-Br3_ARw7.js";import{s as a}from"./Admin.module-DFfqls-e.js";import{A as F}from"./AdminPageChrome-TdsAIsqV.js";import"./charts-D5dg506X.js";import"./forms-GD8l5aEM.js";window.CESIUM_BASE_URL="/cesium/";const U=[{value:"",label:"All statuses"},{value:"pending",label:"Pending"},{value:"contacted",label:"Contacted"},{value:"resolved",label:"Resolved"}],I=[{value:"",label:"All sources"},{value:"landing_page",label:"Landing page"},{value:"artifact_panel",label:"Artifact panel"},{value:"contact_page",label:"Contact page"},{value:"profile",label:"Profile"},{value:"expert_contact",label:"Expert contact"}],b=50;function z(i){const l={pending:{bg:"rgba(251, 191, 36, 0.12)",fg:"var(--admin-warning-text)",bd:"rgba(251, 191, 36, 0.35)"},contacted:{bg:"rgba(59, 130, 246, 0.10)",fg:"var(--admin-info-text)",bd:"rgba(59, 130, 246, 0.30)"},resolved:{bg:"rgba(34, 197, 94, 0.10)",fg:"var(--admin-success-text)",bd:"rgba(34, 197, 94, 0.30)"}}[i]||{bg:"var(--admin-surface-muted)",fg:"var(--admin-muted)",bd:"var(--admin-border)"};return{display:"inline-block",padding:"3px 10px",borderRadius:999,fontSize:"0.6875rem",fontWeight:600,background:l.bg,color:l.fg,border:`1px solid ${l.bd}`,textTransform:"capitalize",letterSpacing:"0.02em"}}function L(){return{display:"inline-block",padding:"3px 10px",borderRadius:999,fontSize:"0.6875rem",fontWeight:500,background:"var(--admin-surface-muted)",color:"var(--admin-muted)",border:"1px solid var(--admin-border)",letterSpacing:"0.02em"}}function P(i){const r=I.find(l=>l.value===i);return r&&r.value?r.label:i.replace(/_/g," ")}function C(i){return i?new Date(i).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0}):"—"}function K(){const[i,r]=M(),l=i.get("status"),W=i.get("source")||"",A=["pending","contacted","resolved"],[o,k]=n.useState([]),[v,_]=n.useState(0),[f,$]=n.useState(!0),[d,B]=n.useState(l&&A.includes(l)?l:""),[c,E]=n.useState(W),[m,j]=n.useState(0),[s,h]=n.useState(null);n.useEffect(()=>{const t=new URLSearchParams;d&&t.set("status",d),c&&t.set("source",c),r(t,{replace:!0})},[d,c,r]);const R=n.useCallback(async()=>{try{$(!0);const t=await w.getAdminContactRequests({status:d||void 0,source:c||void 0,limit:b,offset:m});k(t.items),_(t.total)}catch(t){N.error(t?.message||"Failed to load contact requests")}finally{$(!1)}},[d,c,m]);n.useEffect(()=>{j(0)},[d,c]),n.useEffect(()=>{R()},[R]);const u=async(t,p)=>{try{const x=await w.updateAdminContactRequestStatus(t,p);k(S=>S.map(g=>g.id===t?x:g)),s&&s.id===t&&h(x),N.success(`Marked as ${p}`)}catch(x){N.error(x?.message||"Failed to update status")}},T=t=>{const p="Re: Your message to Solar Intelligence",x=t.message.split(`
2`).map(g=>`> ${g}`).join(`
3`),S=`Hi ${t.name.split(" ")[0]||""},
4
5
6
7---
8${x}
9`;return`mailto:${encodeURIComponent(t.email)}?subject=${encodeURIComponent(p)}&body=${encodeURIComponent(S)}`},y={pending:o.filter(t=>t.status==="pending").length,contacted:o.filter(t=>t.status==="contacted").length,resolved:o.filter(t=>t.status==="resolved").length};return e.jsxs("div",{className:a.adminContainer,children:[e.jsx(F,{}),e.jsx("div",{className:a.adminHeader,children:e.jsxs("h1",{className:a.adminTitle,children:[e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"}),e.jsx("polyline",{points:"22,6 12,13 2,6"})]}),"Contact Requests"]})}),e.jsxs("div",{className:a.statsGrid,style:{marginBottom:20},children:[e.jsxs("div",{className:a.statCard,children:[e.jsx("div",{className:a.statNumber,children:v}),e.jsx("div",{className:a.statLabel,children:"Total matching"})]}),e.jsxs("div",{className:a.statCard,children:[e.jsx("div",{className:a.statNumber,children:y.pending}),e.jsx("div",{className:a.statLabel,children:"Pending on this page"})]}),e.jsxs("div",{className:a.statCard,children:[e.jsx("div",{className:a.statNumber,children:y.contacted}),e.jsx("div",{className:a.statLabel,children:"Contacted on this page"})]}),e.jsxs("div",{className:a.statCard,children:[e.jsx("div",{className:a.statNumber,children:y.resolved}),e.jsx("div",{className:a.statLabel,children:"Resolved on this page"})]})]}),e.jsxs("div",{style:{display:"flex",gap:12,alignItems:"center",flexWrap:"wrap",marginBottom:20,padding:"12px 16px",background:"var(--admin-surface)",border:"1px solid var(--admin-border)",borderRadius:12},children:[e.jsxs("label",{style:{fontSize:"0.8125rem",color:"var(--admin-muted)",fontWeight:500},children:["Status ",e.jsx("select",{value:d,onChange:t=>B(t.target.value),className:a.formSelect,style:{minWidth:160,marginLeft:4},children:U.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value||"all"))})]}),e.jsxs("label",{style:{fontSize:"0.8125rem",color:"var(--admin-muted)",fontWeight:500},children:["Source ",e.jsx("select",{value:c,onChange:t=>E(t.target.value),className:a.formSelect,style:{minWidth:200,marginLeft:4},children:I.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value||"all"))})]}),e.jsx("div",{style:{flex:1}}),e.jsxs("div",{style:{fontSize:"0.75rem",color:"var(--admin-muted)"},children:["Showing ",o.length," of ",v,(d||c)&&" (filtered)"]})]}),f&&o.length===0?e.jsx("div",{style:{padding:32,textAlign:"center",color:"var(--admin-muted)"},children:"Loading requests…"}):o.length===0?e.jsx("div",{style:{padding:48,textAlign:"center",color:"var(--admin-muted)",background:"var(--admin-surface)",border:"1px solid var(--admin-border)",borderRadius:12},children:"No contact requests match the current filters."}):e.jsxs("div",{className:a.usersTable,children:[e.jsxs("div",{className:a.tableHeader,style:{gridTemplateColumns:"160px 130px 1fr 110px 1fr 220px"},children:[e.jsx("div",{children:"Date"}),e.jsx("div",{children:"Source"}),e.jsx("div",{children:"From"}),e.jsx("div",{children:"Status"}),e.jsx("div",{children:"Message"}),e.jsx("div",{children:"Actions"})]}),o.map(t=>e.jsxs("div",{className:a.userRow,style:{gridTemplateColumns:"160px 130px 1fr 110px 1fr 220px",alignItems:"center",cursor:"pointer"},onClick:()=>h(t),children:[e.jsx("div",{style:{fontSize:"0.8125rem",color:"var(--admin-text)"},children:C(t.created_at)}),e.jsx("div",{children:e.jsx("span",{style:L(),children:P(t.source)})}),e.jsxs("div",{className:a.userInfo,children:[e.jsx("div",{className:a.userName,children:t.name}),e.jsx("div",{className:a.userUsername,children:t.email}),t.company&&e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)"},children:t.company})]}),e.jsx("div",{children:e.jsx("span",{style:z(t.status),children:t.status})}),e.jsx("div",{style:{fontSize:"0.8125rem",color:"var(--admin-muted)",overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},children:t.message}),e.jsxs("div",{onClick:p=>p.stopPropagation(),style:{display:"flex",gap:6,flexWrap:"wrap"},children:[e.jsx("a",{href:T(t),className:`${a.btn} ${a.btnPrimary} ${a.btnSm}`,style:{textDecoration:"none"},children:"Reply"}),t.status==="pending"&&e.jsx("button",{type:"button",onClick:()=>
9u(t.id,"contacted"),className:`${a.btn} ${a.btnSecondary} ${a.btnSm}`,children:"Mark contacted"}),t.status==="contacted"&&e.jsx("button",{type:"button",onClick:()=>u(t.id,"resolved"),className:`${a.btn} ${a.btnSuccess} ${a.btnSm}`,children:"Mark resolved"}),t.status==="resolved"&&e.jsx("button",{type:"button",onClick:()=>u(t.id,"pending"),className:`${a.btn} ${a.btnSecondary} ${a.btnSm}`,children:"Reopen"})]})]},t.id))]}),v>b&&e.jsxs("div",{style:{display:"flex",justifyContent:"center",gap:12,marginTop:16},children:[e.jsx("button",{type:"button",disabled:m===0||f,onClick:()=>j(Math.max(0,m-b)),className:`${a.btn} ${a.btnSecondary}`,children:"← Newer"}),e.jsx("button",{type:"button",disabled:m+o.length>=v||f,onClick:()=>j(m+b),className:`${a.btn} ${a.btnSecondary}`,children:"Older →"})]}),s&&e.jsx("div",{className:a.modal,onClick:()=>h(null),children:e.jsxs("div",{className:a.modalContent,onClick:t=>t.stopPropagation(),style:{maxWidth:640},children:[e.jsxs("div",{className:a.modalHeader,children:[e.jsxs("h2",{className:a.modalTitle,children:["Contact request #",s.id]}),e.jsx("button",{className:a.closeBtn,onClick:()=>h(null),children:e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),e.jsxs("div",{style:{padding:"0 24px 24px"},children:[e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,marginBottom:16},children:[e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:4},children:"From"}),e.jsx("div",{style:{fontSize:"0.9375rem",color:"var(--admin-text)",fontWeight:600},children:s.name}),e.jsx("div",{style:{fontSize:"0.8125rem",color:"var(--admin-muted)"},children:s.email}),s.company&&e.jsx("div",{style:{fontSize:"0.75rem",color:"var(--admin-subtle)"},children:s.company}),s.phone&&e.jsx("div",{style:{fontSize:"0.75rem",color:"var(--admin-subtle)"},children:s.phone})]}),e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:4},children:"Submitted"}),e.jsx("div",{style:{fontSize:"0.8125rem",color:"var(--admin-text)"},children:C(s.created_at)}),e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:4,marginTop:8},children:"Source"}),e.jsx("span",{style:L(),children:P(s.source)}),e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:4,marginTop:8},children:"Status"}),e.jsx("span",{style:z(s.status),children:s.status}),s.contacted_at&&e.jsxs("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",marginTop:4},children:["Contacted ",C(s.contacted_at)]})]})]}),e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"0.6875rem",color:"var(--admin-subtle)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:6},children:"Message"}),e.jsx("div",{style:{fontSize:"0.875rem",color:"var(--admin-text)",lineHeight:1.6,background:"var(--admin-surface-muted)",border:"1px solid var(--admin-border)",borderRadius:8,padding:"12px 14px",whiteSpace:"pre-wrap"},children:s.message})]}),e.jsxs("div",{style:{display:"flex",gap:8,marginTop:18,flexWrap:"wrap"},children:[e.jsx("a",{href:T(s),className:`${a.btn} ${a.btnPrimary}`,style:{textDecoration:"none"},children:"Reply by email"}),s.status!=="contacted"&&e.jsx("button",{type:"button",onClick:()=>u(s.id,"contacted"),className:`${a.btn} ${a.btnSecondary}`,children:"Mark contacted"}),s.status!=="resolved"&&e.jsx("button",{type:"button",onClick:()=>u(s.id,"resolved"),className:`${a.btn} ${a.btnSuccess}`,children:"Mark resolved"}),s.status!=="pending"&&e.jsx("button",{type:"button",onClick:()=>u(s.id,"pending"),className:`${a.btn} ${a.btnSecondary}`,children:"Reopen"})]})]})]})})]})}export{K 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.