// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-or-later
// @source: https://gitlab.com/soapbox-pub/ditto/-/tree/f0a3877c
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{Ni as t,_n as n,a as r,bt as i,li as a,qi as o}from"./lucide-icons-BdRF0moN.js";import{t as s}from"./jsx-runtime-By8HlURe.js";import{t as c}from"./dist-DQ82bf9M.js";import{h as l,t as u}from"./useQuery-rCAlChE8.js";import{t as d}from"./useMutation-CgsR0O-3.js";import{s as f,t as p}from"./useCurrentUser-C6OJJlWo.js";import{t as m}from"./button-Cs26nq0r.js";import{t as h}from"./useNostrPublish-CrMjnYm4.js";import{n as g,r as _,t as v}from"./avatar--oX_CTF4.js";import{o as y}from"./BioContent-BjUPDB1O.js";import{t as b}from"./parseAddr-BmO3JZWT.js";import{t as x}from"./input-CM5Fnyvy.js";import{a as S,c as C,n as w,r as T,t as E}from"./dialog-C3CFmras.js";import{t as D}from"./useSearchProfiles-uU0NOVhy.js";import{t as O}from"./scroll-area-D2CmkWvj.js";var k=e(o(),1);function A(){let{user:e}=p(),t=l(),{mutateAsync:n}=h();return d({mutationFn:async({aTag:t,recipientPubkeys:r})=>{if(!e)throw Error(`User is not logged in`);if(r.length===0)throw Error(`Must specify at least one recipient`);let i=[[`a`,t],...r.map(e=>[`p`,e])];return n({kind:8,content:``,tags:i})},onSuccess:(e,{recipientPubkeys:n})=>{for(let e of n)t.invalidateQueries({queryKey:[`badge-awards-to`,e]})}})}var j=s();function M({open:e,onOpenChange:o,badgeATag:s,badgeName:c}){let{toast:l}=f(),[u,d]=(0,k.useState)(``),[p,h]=(0,k.useState)([]),{data:y,isLoading:b}=D(u),{mutateAsync:M,isPending:P}=A(),F=(0,k.useMemo)(()=>new Set(p.map(e=>e.pubkey)),[p]),I=(0,k.useMemo)(()=>(y??[]).filter(e=>!F.has(e.pubkey)),[y,F]),L=(0,k.useCallback)(e=>{h(t=>t.some(t=>t.pubkey===e.pubkey)?t:[...t,e]),d(``)},[]),R=(0,k.useCallback)(e=>{h(t=>t.filter(t=>t.pubkey!==e))},[]),z=(0,k.useCallback)(async()=>{if(p.length!==0)try{await M({aTag:s,recipientPubkeys:p.map(e=>e.pubkey)}),l({title:`Badge awarded!`,description:`"${c}" awarded to ${p.length} user${p.length===1?``:`s`}.`}),h([]),d(``),o(!1)}catch{l({title:`Failed to award badge`,description:`Please try again.`,variant:`destructive`})}},[p,M,s,c,l,o]);return(0,j.jsx)(E,{open:e,onOpenChange:(0,k.useCallback)(e=>{e||(d(``),h([])),o(e)},[o]),children:(0,j.jsxs)(w,{className:`sm:max-w-md gap-0 p-0 overflow-hidden`,children:[(0,j.jsxs)(S,{className:`px-4 pt-5 pb-3`,children:[(0,j.jsxs)(C,{className:`flex items-center gap-2`,children:[(0,j.jsx)(t,{className:`size-5 text-primary`}),`Award Badge`]}),(0,j.jsxs)(T,{className:`text-sm text-muted-foreground`,children:[`Search for users to award `,(0,j.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`"`,c,`"`]}),` to.`]})]}),(0,j.jsx)(`div`,{className:`px-4 pb-2`,children:(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(i,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,j.jsx)(x,{placeholder:`Search by name or NIP-05...`,value:u,onChange:e=>d(e.target.value),className:`pl-9 pr-3`,autoFocus:!0})]})}),p.length>0&&(0,j.jsx)(`div`,{className:`px-4 pb-2`,children:(0,j.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:p.map(e=>{let t=e.metadata.name||e.metadata.display_name||`Anonymous`;return(0,j.jsxs)(`button`,{type:`button`,onClick:()=>R(e.pubkey),className:`inline-flex items-center gap-1.5 pl-1 pr-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium hover:bg-primary/20 transition-colors`,children:[(0,j.jsxs)(v,{className:`size-5`,children:[(0,j.jsx)(_,{src:e.metadata.picture,alt:t}),(0,j.jsx)(g,{className:`bg-primary/20 text-[9px] text-primary`,children:t[0]?.toUpperCase()})]}),(0,j.jsx)(`span`,{className:`max-w-[100px] truncate`,children:t}),(0,j.jsx)(r,{className:`size-3 opacity-60`})]},e.pubkey)})})}),(0,j.jsx)(O,{className:`border-t border-border`,style:{height:280},children:b&&u.trim().length>0?(0,j.jsx)(`div`,{className:`flex items-center justify-center py-10 text-muted-foreground`,children:(0,j.jsx)(n,{className:`size-5 animate-spin`})}):I.length>0?(0,j.jsx)(`div`,{className:`divide-y divide-border`,children:I.map(e=>(0,j.jsx)(N,{profile:e,onSelect:L},e.pubkey))}):u.trim().length>0?(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-10 text-muted-foreground text-sm`,children:[(0,j.jsx)(i,{className:`size-8 mb-2 opacity-30`}),`No users found`]}):(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-10 text-muted-foreground text-sm`,children:[(0,j.jsx)(i,{className:`size-8 mb-2 opacity-30`}),`Search to find users`]})}),(0,j.jsx)(`div`,{className:`px-4 py-3 border-t border-border bg-secondary/5`,children:(0,j.jsx)(m,{onClick:z,disabled:p.length===0||P,className:`w-full gap-2`,children:P?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(n,{className:`size-4 animate-spin`}),`Awarding...`]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(a,{className:`size-4`}),`Award Badge`,p.length>0?` to ${p.length} user${p.length===1?``:`s`}`:``]})})})]})})}function N({profile:e,onSelect:t}){let n=e.metadata.name||e.metadata.display_name||`Anonymous`,r=e.metadata.about;return(0,j.jsxs)(`button`,{type:`button`,onClick:()=>t(e),className:`flex items-center gap-3 w-full px-4 py-2.5 text-left hover:bg-secondary/30 transition-colors`,children:[(0,j.jsxs)(v,{className:`size-10 shrink-0`,children:[(0,j.jsx)(_,{src:e.metadata.picture,alt:n}),(0,j.jsx)(g,{className:`bg-primary/20 text-primary text-sm`,children:n[0]?.toUpperCase()})]}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`span`,{className:`font-semibold text-sm block truncate`,children:n}),r&&(0,j.jsx)(`p`,{className:`text-xs text-muted-foreground line-clamp-1`,children:r})]})]})}function P(e){let{nostr:t}=c(),n=u({queryKey:[`badge-awards-to`,e??``],queryFn:async({signal:n})=>e?t.query([{kinds:[8],"#p":[e],limit:200}],{signal:n}):[],enabled:!!e,staleTime:6e4}),{refs:r}=y(e),i=(0,k.useMemo)(()=>{if(!n.data)return[];let e=new Set(r.filter(e=>e.eTag).map(e=>e.eTag)),t=[],i=new Set;for(let a of n.data){if(e.has(a.id))continue;let n=a.tags.find(([e,t])=>e===`a`&&t?.startsWith(`30009:`))?.[1];if(!n||i.has(n)||r.some(e=>e.aTag===n))continue;i.add(n);let o=b(n);o&&t.push({aTag:n,awardEvent:a,awardedAt:a.created_at,issuerPubkey:o.pubkey,identifier:o.identifier})}return t.sort((e,t)=>t.awardedAt-e.awardedAt)},[n.data,r]);return{pendingBadges:i,count:i.length,isLoading:n.isLoading}}export{M as n,A as r,P as t};
// @license-end
