PageSourceSearch

https://www.gokanic.com/assets/index-BucbMoJT.js

js gokanic.com collected 2026-10-02 01:31:42 UTC 10,783 bytes, 1 lines download raw bytes

1import{r as c,k as S,j as e,B as d,L as $,S as L}from"./index-DSd_KA67.js";import{a as f}from"./api-DEjVNANO.js";import{A as V,u as O,a as _,b as G,d as J,f as T,c as K}from"./index-CjzYEg5p.js";import{u as y}from"./useMutation-BYp1wGY4.js";import{a as Q,v as q}from"./moderation-Bfr23ug2.js";import{d as j,s as b}from"./toast-1q0BdJuf.js";import{M as r}from"./index-BcV1WcSQ.js";import{C as R}from"./index-BDCF4RGH.js";import{C as W}from"./ConversationViewDialog-BcLDIsPU.js";import{u as X}from"./use_paginated_query-BRxdp19C.js";import{D as Y}from"./index-BkgI3J5k.js";import{S as Z}from"./search-ChBX8pay.js";import{I as z}from"./index-Bv02D27B.js";import{C as P}from"./index-BP54K2SS.js";import{L as l}from"./index-D6zPwYlU.js";import"./createLucideIcon-BC48Drc1.js";import"./Dialog-ChwbEPk_.js";import"./Modal-DNKE2hrT.js";import"./surface-CXiMNM_t.js";import"./index-B-2pgCUr.js";import"./ban-CR4U0QKw.js";import"./x-DEPUe6e3.js";import"./arrow-left-gte9njEQ.js";import"./arrow-right-DeQur32B.js";import"./ListBox-a8Ty2P5Q.js";import"./Label-DRpCpLvD.js";function ee({report:a,isOpen:h,onClose:m}){const[x,o]=c.useState("confirm"),[i,w]=c.useState(null),[N,I]=c.useState(""),u=()=>{o("confirm"),w(null),I(""),m()},{mutateAsync:k,isPending:p}=y({mutationFn:S(f.reports.resolveReport),onSuccess:()=>b("Report dismissed"),onError:n=>j(n.message)}),{mutateAsync:M,isPending:C}=y({mutationFn:S(f.admin.adminRemoveListing),onSuccess:()=>b("Listing removed"),onError:n=>j(n.message)}),{mutateAsync:v,isPending:s}=y({mutationFn:S(f.admin.adminRemoveService),onSuccess:()=>b("Service removed"),onError:n=>j(n.message)}),{mutateAsync:t,isPending:F}=y({mutationFn:S(f.admin.adminRemoveReview),onSuccess:()=>b("Review removed"),onError:n=>j(n.message)}),{mutateAsync:A,isPending:U}=y({mutationFn:S(f.admin.adminSuspendUser),onSuccess:()=>b("User suspended"),onError:n=>j(n.message)}),D=p||C||s||F||U;if(!a)return null;const B=async()=>{await k({reportId:a._id,status:"dismissed"}),u()},E=async()=>{if(!i)return;const n={reportId:a._id,violationReason:i,violationDetails:N.trim()||void 0};switch(a.targetType){case"listing":await M({...n,listingId:a.targetListingId});break;case"service":await v({...n,serviceId:a.targetServiceId});break;case"review":await t({...n,reviewId:a.targetReviewId});break;case"user":await A({...n,targetUserId:a.targetUserId});break;case"conversation":if(!a.targetOwnerId)return;await A({...n,targetUserId:a.targetOwnerId});break;default:{const H=a.targetType;j(`Unknown target type: ${String(H)}`);return}}u()};return e.jsx(r.Backdrop,{isOpen:h,onOpenChange:n=>{n||u()},isDismissable:!D,children:e.jsx(r.Container,{children:e.jsx(r.Dialog,{className:"sm:max-w-lg",children:x==="confirm"?e.jsxs(e.Fragment,{children:[e.jsx(r.Header,{children:e.jsx(r.Heading,{children:"Review Report"})}),e.jsx(r.Body,{className:"space-y-3",children:e.jsxs("div",{className:"rounded-xl bg-surface-secondary p-4 space-y-2 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted w-20 shrink-0",children:"Target"}),e.jsx("span",{className:"font-medium",children:a.targetLabel})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted w-20 shrink-0",children:"Type"}),e.jsx(R,{variant:"soft",className:"capitalize",children:a.targetType})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted w-20 shrink-0",children:"Reason"}),e.jsx("span",{children:a.reason.replace(/_/g," ")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted w-20 shrink-0",children:"Reporter"}),e.jsx("span",{children:a.reporterName})]}),a.details&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx("span",{className:"text-muted w-20 shrink-0",children:"Details"}),e.jsx("span",{className:"text-muted italic",children:a.details})]})]})}),e.jsxs(r.Footer,{children:[e.jsx(d,{variant:"ghost",onPress:u,isDisabled:D,children:"Cancel"}),e.jsx(d,{variant:"ghost",onPress:B,isPending:p,children:"Dismiss"}),e.jsx(d,{variant:"primary",onPress:()=>o("violation"),children:"Take Action"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx(r.Header,{children:e.jsx(r.Heading,{children:"Select Violation Reason"})}),e.jsxs(r.Body,{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-muted",children:"This will remove the content and notify the owner."}),e.jsx("div",{className:"flex flex-col gap-2",children:Q.map(n=>e.jsx("button",{onClick:()=>w(n),className:`text-left px-4 py-2 rounded-xl border text-sm transition-colors ${i===n?"border-primary bg-primary/10 text-primary font-medium":"border-muted/20 hover:bg-surface-secondary"}`,children:q[n]},n))}),i&&e.jsx("textarea",{value:N,onChange:n=>I(n.target.value),placeholder:"Additional details (optional)",rows:3,className:"w-full px-3 py-2 rounded-xl bg-surface border border-muted/20 text-sm resize-y"})]}),e.jsxs(r.Footer,{children:[e.jsx(d,{variant:"ghost",onPress:()=>o("confirm"),isDisabled:D,children:"Back"}),e.jsx(d,{variant:"danger",onPress:E,isDisabled:!i,isPending:D,children:"Submit"})]})]})})})})}function se(a){const m=Date.now()-a,x=Math.floor(m/6e4),o=Math.floor(m/36e5),i=Math.floor(m/864e5);return x<1?"Just now":x<60?`${x}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"})}function te(a){return a.replace(/_/g," ").replace(/^\w/,h=>h.toUpperCase())}const g=K();function ae(){const[a,h]=c.useState("pending"),[m,x]=c.useState([]),[o,i]=c.useState(""),[w,N]=c.useState(null),[I,u]=c.useState(null),{results:k,status:p,loadMore:M}=X(f.reports.getReportsAdmin,a==="all"?{}:{status:a},{initialNumItems:25}),C=c.useMemo(()=>[g.accessor("targetLabel",{header:({column:s})=>e.jsxs("button",{className:"flex items-center gap-1 hover:text-accent",onClick:()=>s.toggleSorting(),children:["Target",e.jsx(V,{size:14})]}),cell:s=>{const t=s.row.original;return t.targetOwnerId?e.jsx($,{to:"/admin/users/$userId",params:{userId:t.targetOwnerId},search:{expandedServiceId:void 0,from:void 0},className:"text-accent hover:underline",onClick:F=>F.stopPropagation(),children:s.getValue()}):e.jsx("span",{children:s.getValue()})}}),g.accessor("targetType",{header:"Type",cell:s=>e.jsx(R,{variant:"soft",className:"capitalize",children:s.getValue()}),enableSorting:!1}),g.accessor("reason",{header:({column:s})=>e.jsxs("button",{className:"flex items-center gap-1 hover:text-accent",onClick:()=>s.toggleSorting(),children:["Reason",e.jsx(V,{size:14})]}),cell:s=>te(s.getValue())}),g.accessor("reporterName",{header:"Reporter",cell:s=>{const t=s.row.original.reporterEmail;return e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:s.getValue()}),t&&e.jsx("div",{className:"text-xs text-muted",children:t})]})}}),g.accessor("_creationTime",{header:({column:s})=>e.jsxs("button",{className:"flex items-center gap-1 hover:text-accent",onClick:()=>s.toggleSorting(),children:["Date",e.jsx(V,{size:14})]}),cell:s=>se(s.getValue())}),g.accessor("status",{header:"Status",cell:s=>{const t=s.getValue();return t==="pending"?e.jsx(R,{color:"warning",variant:"soft",children:"Pending"}):t==="reviewed"?e.jsx(R,{color:"success",variant:"soft",children:"Reviewed"}):e.jsx(R,{variant:"soft",children:"Dismissed"})},enableSorting:!1}),g.display({id:"actions",header:"Actions",cell:s=>{const t=s.row.original;return t.status==="pending"?e.jsxs("div",{className:"flex gap-2",children:[t.targetConversationId&&e.jsx(d,{size:"sm",variant:"ghost",onPress:()=>
1u(t.targetConversationId??null),children:"View"}),e.jsx(d,{size:"sm",variant:"secondary",onPress:()=>N(t),children:"Action"})]}):e.jsxs("div",{className:"text-xs text-muted",children:[t.reviewerName&&e.jsxs("div",{children:["By ",t.reviewerName]}),t.adminNotes&&e.jsx("div",{className:"truncate max-w-[200px]",title:t.adminNotes,children:t.adminNotes})]})}})],[]),v=O({data:k,columns:C,state:{sorting:m,globalFilter:o},onSortingChange:x,onGlobalFilterChange:i,getCoreRowModel:J(),getFilteredRowModel:G(),getSortedRowModel:_(),globalFilterFn:"includesString"});return p==="LoadingFirstPage"?e.jsx("div",{className:"min-h-dvh bg-background flex items-center justify-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(L,{size:"xl"}),e.jsx(Y,{children:"Loading reports..."})]})}):e.jsxs(e.Fragment,{children:[e.jsx("main",{className:"w-full m-0 flex flex-col space-y-6 px-1 py-4 sm:px-4",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Z,{size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted"}),e.jsx(z,{type:"text",placeholder:"Search reports...",value:o,onChange:s=>i(s.target.value),className:"pl-10"})]}),e.jsxs(P,{selectedKey:a,onSelectionChange:s=>h(s??"all"),children:[e.jsxs(P.InputGroup,{children:[e.jsx(z,{placeholder:"Status"}),e.jsx(P.Trigger,{})]}),e.jsx(P.Popover,{children:e.jsxs(l,{children:[e.jsxs(l.Item,{id:"pending",textValue:"Pending",children:["Pending",e.jsx(l.ItemIndicator,{})]}),e.jsxs(l.Item,{id:"all",textValue:"All Status",children:["All Status",e.jsx(l.ItemIndicator,{})]}),e.jsxs(l.Item,{id:"reviewed",textValue:"Reviewed",children:["Reviewed",e.jsx(l.ItemIndicator,{})]}),e.jsxs(l.Item,{id:"dismissed",textValue:"Dismissed",children:["Dismissed",e.jsx(l.ItemIndicator,{})]})]})})]})]}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-muted/20",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-surface-secondary",children:v.getHeaderGroups().map(s=>e.jsx("tr",{children:s.headers.map(t=>e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-muted",children:t.isPlaceholder?null:T(t.column.columnDef.header,t.getContext())},t.id))},s.id))}),e.jsx("tbody",{className:"divide-y divide-muted/10",children:v.getRowModel().rows.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:C.length,className:"px-4 py-8 text-center text-muted",children:"No reports found"})}):v.getRowModel().rows.map(s=>e.jsx("tr",{className:"hover:bg-surface-secondary transition-colors",children:s.getVisibleCells().map(t=>e.jsx("td",{className:"px-4 py-3 text-sm",children:T(t.column.columnDef.cell,t.getContext())},t.id))},s.id))})]})}),e.jsxs("div",{className:"flex justify-between items-center text-sm text-muted",children:[e.jsxs("span",{children:["Showing ",v.getRowModel().rows.length," reports"]}),p==="CanLoadMore"&&e.jsx(d,{variant:"ghost",size:"sm",onPress:()=>M(25),children:"Load More"}),p==="LoadingMore"&&e.jsx(L,{size:"sm"})]})]})}),e.jsx(ee,{report:w,isOpen:w!==null,onClose:()=>N(null)}),e.jsx(W,{conversationId:I,onClose:()=>u(null)})]})}const ke=ae;export{ke 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.