PageSourceSearch

https://farcaster.xyz/assets/ManageChannelUserDropdown-CMH0WxEQ.js

js farcaster.xyz collected 2026-09-24 08:33:02 UTC 9,017 bytes, 1 lines download raw bytes

1import{r as d,f as v,i as y,j as a}from"./vendor-wagmi-CRHMQcRy.js";import{T as $,$ as h,b7 as F,c8 as I,c9 as k,b5 as T,b6 as U,bi as f,H as p,dA as R,g3 as A,dz as z,g4 as W,g5 as G,c3 as b,bh as m,cj as c,g6 as V,G as x,d6 as X,eE as Z,eF as J,eH as Y,b3 as _,am as g,eO as S}from"./index-CjDX1y09.js";import{u as K}from"./useSendMessageToUser-DYgHwOl-.js";import{u as ee,b as ne,c as te}from"./useUserChannelRole-D0qYbPi3.js";const P=({viewerFid:n,viewerRole:e,targetFid:t,targetRole:r,targetBanned:s})=>{const o=e==="owner",i=e==="owner"||e==="moderator",l=n===t;return d.useMemo(()=>({canBanFromChannel:!l&&i&&r==="none",canUnbanFromChannel:!l&&i&&s,canAddAsMember:!l&&i&&r==="none",canRemoveAsMember:!l&&i&&r==="member",canAddAsModerator:!l&&o&&r==="member",canRemoveAsModerator:!l&&o&&r==="moderator"}),[o,i,l,s,r])},je=({viewerFid:n,viewerRole:e,cast:t})=>{const r=P({viewerFid:n,viewerRole:e,targetFid:t.author.fid,targetRole:t.channel?.authorContext?.role,targetBanned:t.channel?.authorContext?.banned}),s=e==="owner"||e==="moderator";return d.useMemo(()=>({...r,canPinCast:s&&!t.parentHash,canHideCast:s}),[t.parentHash,s,r])},B=({channelKey:n,query:e,limit:t})=>$(["channelBannedUsers",n,e,t]),ae=({apiClient:n,params:e})=>async({pageParam:t})=>{const r=await n.getChannelBannedUsers({...e,cursor:t});return{items:r.data.result.users,next:r.data.next}},we=({channelKey:n,query:e="",limit:t=20})=>{const{apiClient:r}=h(),s=y({queryKey:B({channelKey:n,query:e,limit:t}),queryFn:ae({apiClient:r,params:{limit:t,channelKey:n,query:e}}),initialPageParam:void 0,getNextPageParam:F,refetchOnMount:"always",staleTime:0}),o=I({data:s.data,uniqBy:k}),i=T(s);return U(s,{flatData:o,onEndReached:i})},se=()=>{const n=v();return d.useCallback(({channelKey:e})=>{n.invalidateQueries({queryKey:B({channelKey:e})})},[n])},re=({apiClient:n,params:e})=>async({pageParam:t})=>{const r=await n.getChannelUsersForInvite({...e,cursor:t});return{items:r.data.result.users,next:r.data.next}},oe=({queryClient:n,channelKey:e})=>{n.invalidateQueries({queryKey:A({channelKey:e})})},ye=({channelKey:n,query:e="",limit:t=20})=>{const{apiClient:r}=h(),s=y({initialPageParam:void 0,queryKey:A({channelKey:n,query:e,pagination:{limit:t}}),queryFn:re({apiClient:r,params:{limit:t,channelKey:n,query:e}}),getNextPageParam:F,refetchOnMount:"always",staleTime:0}),o=I({data:s.data,uniqBy:k}),i=T(s);return U(s,{flatData:o,onEndReached:i})},ie=()=>{const{apiClient:n}=h(),e=v(),{trackEvent:t}=f();return d.useCallback(async({fid:r,channelKey:s})=>{try{t(p.InviteToChannelRole,{channelKey:s,role:"member"}),R({queryClient:e,channelKey:s,fid:r,update:o=>({...o,relation:"pending-member"})}),await n.inviteChannelUserToRole({inviteFid:r,channelKey:s,role:"member"})}catch(o){throw oe({queryClient:e,channelKey:s}),o}},[n,e,t])},de=()=>{const{apiClient:n}=h(),e=v(),{trackEvent:t}=f();return d.useCallback(async({fid:r,channelKey:s})=>{try{R({queryClient:e,channelKey:s,fid:r,update:o=>({...o,relation:"pending-moderator"})}),t(p.InviteToChannelRole,{channelKey:s,role:"moderator"}),await n.inviteChannelUserToRole({inviteFid:r,channelKey:s,role:"moderator"})}catch(o){throw z({queryClient:e,channelKey:s}),o}},[n,e,t])},le=()=>{const{apiClient:n}=h(),e=W(),t=se(),{trackEvent:r}=f();return d.useCallback(async({channelKey:s,unbanFid:o})=>{r(p.ClickUnbanUserFromChannel,{channelKey:s,unbanFid:o}),await n.unbanUserFromChannel({channelKey:s,unbanFid:o}),t({channelKey:s});for(const i of["default","curated","priority","members"])e({feedKey:s,feedType:i})},[n,t,e,r])},ce=({onConfirm:n,username:e})=>G({onConfirm:n,extraData:{username:e},ConfirmModal:me});function me({extraData:{username:n},...e}){return a.jsx(b,{...e,title:"Previously removed",confirmText:"Invite",body:a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"font-semibold",children:n})," was previously removed or banned by another moderator. Are you sure you want to add them back?"]})})}const ue=({channelKey:n,fid:e,username:t,restricted:r})=>{const s=ie(),o=d.useCallback(async()=>{try{await s({fid:e,channelKey:n}),m({message:a.jsxs(a.Fragment,{children:["Invite sent to ",a.jsx("span",{className:"font-semibold",children:t})]}),type:"success"})}catch{m({message:a.jsxs(a.Fragment,{children:["Failed to invite ",a.jsx("span",{className:"font-semibold",children:t})]}),type:"error"})}},[n,e,s,t]),i=ce({onConfirm:o,username:t});return{inviteToChannel:d.useCallback(async()=>
1{if(r){i.open();return}o()},[i,o,r]),Component:i.Component}};function Ce({invited:n,channelKey:e,fid:t,username:r,restricted:s,noIcon:o=!1}){const{inviteToChannel:i,Component:l}=ue({channelKey:e,fid:t,restricted:s,username:r});return a.jsxs(a.Fragment,{children:[a.jsx(c,{name:`${n?"Invited":"Invite"} to channel`,icon:o?void 0:a.jsx(V,{size:"small"}),onSelect:()=>{i()},disabled:n}),l]})}const he=({size:n})=>a.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,fill:"none",viewBox:"0 0 20 20",children:[a.jsx("path",{className:"stroke-current",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M1.667 17.5a6.666 6.666 0 0 1 9.894-5.833"}),a.jsx("path",{className:"stroke-current",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M8.333 10.833a4.167 4.167 0 1 0 0-8.333 4.167 4.167 0 0 0 0 8.333ZM14.167 14.167l4.166 4.166M18.333 14.167l-4.166 4.166"})]});function Fe({channelKey:n,channelUser:e,children:t}){const[r,s]=d.useState(!1),[o,i]=d.useState(!1),[l,u]=d.useState(!1),M=x(),N=ee(n),E=M.fid===e.user.fid,C=P({viewerFid:M.fid,viewerRole:N,targetFid:e.user.fid,targetRole:e.channelContext.role,targetBanned:e.channelContext.banned}),O=X(),q=K(),j=de(),D=d.useCallback(async()=>{try{await j({channelKey:n,fid:e.user.fid})}catch{m({message:"Failed to invite user to moderate",type:"error"})}},[j,n,e.user.fid]),Q=d.useCallback(()=>{s(!0),i(!1),u(!1)},[]),H=d.useCallback(()=>{s(!1),i(!0),u(!1)},[]),L=d.useCallback(()=>{s(!1),i(!1),u(!0)},[]);return a.jsxs(a.Fragment,{children:[a.jsxs(Z,{children:[a.jsx(J,{className:"cursor-pointer",children:t}),a.jsxs(Y,{side:"bottom",align:"end",className:"outline-hidden z-20 min-w-32 rounded-md border p-1 shadow-lg bg-app border-default",onCloseAutoFocus:w=>w.preventDefault(),children:[a.jsx(c,{onSelect:()=>{O({user:e.user})},children:"View profile"}),!E&&a.jsxs(a.Fragment,{children:[a.jsx(c,{onSelect:()=>q({user:e.user}),children:"Message"}),C.canAddAsMember&&a.jsx(Ce,{invited:e.channelContext.pendingRole==="member",fid:e.user.fid,channelKey:n,username:_(e.user),restricted:e.channelContext.restricted,noIcon:!0}),C.canAddAsModerator&&a.jsx(c,{onSelect:D,children:"Add as moderator"}),C.canRemoveAsModerator&&a.jsx(c,{onSelect:Q,destructive:!0,children:"Remove moderator"}),C.canRemoveAsMember&&a.jsx(c,{onSelect:H,destructive:!0,children:"Remove member"}),C.canUnbanFromChannel&&a.jsx(c,{onSelect:L,children:"Unban"})]})]})]}),r&&a.jsx(ve,{channelKey:n,user:e.user,close:()=>s(!1)}),o&&a.jsx(be,{channelKey:n,user:e.user,close:()=>i(!1)}),l&&a.jsx(fe,{channelKey:n,user:e.user,close:()=>u(!1)})]})}function be({channelKey:n,user:e,close:t}){const r=x(),s=te(),o=d.useCallback(async()=>{try{t(),await s({channelKey:n,removeFid:e.fid,actorFid:r.fid})}catch{m({message:"Failed to remove member",type:"error"})}},[t,s,n,e.fid,r.fid]);return a.jsx(b,{onBackdropClose:()=>{t()},onCancel:()=>{t()},onConfirm:o,title:"Remove member",confirmText:"Remove",destructive:!0,icon:({size:i})=>a.jsx(S,{size:i}),body:a.jsxs(a.Fragment,{children:["By removing"," ",a.jsx("span",{className:"font-semibold",children:g(e)}),":",a.jsxs("ul",{className:"bullets",children:[a.jsx("li",{children:"All previous casts will be removed from the channel"}),a.jsx("li",{children:"They will not be able to cast in the channel"})]})]})})}function ve({channelKey:n,user:e,close:t}){const r=x(),s=ne(),o=d.useCallback(async()=>{try{t(),await s({channelKey:n,fid:e.fid,actorFid:r.fid})}catch{m({message:"Failed to remove moderator",type:"error"})}},[t,s,n,e.fid,r.fid]);return a.jsx(b,{onBackdropClose:()=>{t()},onCancel:()=>{t()},onConfirm:o,title:"Remove moderator",confirmText:"Remove",destructive:!0,icon:({size:i})=>a.jsx(S,{size:i}),body:a.jsxs(a.Fragment,{children:["If you remove"," ",a.jsx("span",{className:"font-semibold",children:g(e)})," as a moderator, they will no longer be able to manage channel members or invite links. They will still have access to the channel as a regular member."]})})}function fe({channelKey:n,user:e,close:t}){const r=le(),s=d.useMemo(()=>g(e),[e]),o=d.useCallback(async()=>
1{try{t(),await r({channelKey:n,unbanFid:e.fid}),m({message:`${s} was unbanned`})}catch{m({message:"Failed to unban user",type:"error"})}},[t,r,n,e.fid,s]);return a.jsx(b,{onBackdropClose:()=>{t()},onCancel:()=>{t()},onConfirm:o,title:"Unban from channel",confirmText:"Unban",icon:he,body:a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"font-semibold",children:s})," will be able to reply to casts and all existing replies will be unhidden"]})})}export{be as C,Ce as I,Fe as M,he as P,we as a,ie as b,je as c,ye as u};

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.