1import"../chunks/Bzak7iHL.js";import{p as Ce,y as Ke,a as K,b as o,c as Xe,h as e,u as y,f as m,d,s as l,r as i,t as T,e as z,l as b,m as X,i as H,j as Z}from"../chunks/q4PQuOgA.js";import{i as R}from"../chunks/Czg-_pXN.js";import{e as U,i as He}from"../chunks/DQ_A1JCb.js";import{n as ee,m as Ue}from"../chunks/BEVBNINl.js";import{p as Ve}from"../chunks/D5HRQ_fa.js";import{q as _e}from"../chunks/Co9a3uaI.js";import{c as Ye}from"../chunks/SINPHRUH.js";import{c as Je}from"../chunks/D0E1jc3X.js";import{c as We,a as Ze,b as ea,d as aa}from"../chunks/C3W4HJS_.js";import{s as ae}from"../chunks/DGWEKKuw.js";import{B as V}from"../chunks/60gsQOXu.js";import{T as ta}from"../chunks/DTjgihOa.js";import{T as sa}from"../chunks/BoQhn75B.js";import{E as ra}from"../chunks/BIvVR5bO.js";import{C as ia}from"../chunks/Cmz_eCJl.js";import{P as na}from"../chunks/BCqHzu6a.js";import{S as oa}from"../chunks/G8F5G8S5.js";import{X as da}from"../chunks/CD4uU8RF.js";import{S as be}from"../chunks/Bf8zOSSI.js";async function la(N,x){await ae(N,[{id:ee(),$type:"space.roomy.federation.request.v0",federatingSpaceDid:x.federatingSpaceDid,...x.message!==void 0&&{message:x.message}}])}async function ca(N,x){await ae(N,[{id:ee(),$type:"space.roomy.federation.respond.v0",federatingSpaceDid:x.federatingSpaceDid,approve:x.approve,...x.message!==void 0&&{message:x.message}}])}async function pa(N,x){await ae(N,[{id:ee(),$type:"space.roomy.federation.remove.v0",federatingSpaceDid:x}])}async function va(N,x){await ae(N,[{id:ee(),$type:"space.roomy.federation.setRoomPermission.v0",federatingSpaceDid:x.federatingSpaceDid,roomId:x.roomId,permission:x.permission}])}var ua=m('<div class="py-12 text-center text-sm text-base-500 dark:text-base-400">Only space admins can manage federations.</div>'),fa=m(`<p class="text-sm text-base-400">No spaces available to request from. You need to be a member of the 2 space you want to federate with.</p>`),ma=m("<option> </option>"),ga=m("<!> Send request",1),_a=m('<div class="flex flex-col gap-2"><select class="rounded-md text-sm border-1 font-light focus-visible:outline-0 bg-neutral-300/50 dark:bg-neutral-900 text-neutral-950 dark:text-neutral-100 border-neutral-400/50 dark:border-neutral-700 px-3.5 py-1.5"><option disabled="">Select a spaceâ¦</option><!></select> <!> <!> <div class="flex justify-end"><!></div></div>'),ba=m('<li class="rounded-2xl border border-base-200 dark:border-base-800 p-3 flex items-center justify-between gap-2"><div class="min-w-0"><div class="text-sm font-medium text-base-900 dark:text-base-100 truncate"> </div> <p class="text-xs text-base-400"> <!></p></div> <!></li>'),xa=m('<section class="space-y-3"><h2 class="text-base font-semibold text-base-900 dark:text-base-100">Request status</h2> <ul class="flex flex-col gap-2"></ul></section>'),ya=m('<p class="text-sm text-base-400">No pending federation requests.</p>'),ha=m("<br/> ",1),Sa=m("<!> Reject",1),wa=m("<!> Approve",1),$a=m('<li class="rounded-2xl border border-base-200 dark:border-base-800 p-3 flex flex-col gap-2"><div class="flex items-center gap-2"><!> <span class="text-sm font-medium text-base-900 dark:text-base-100 truncate"> </span></div> <p class="text-xs text-base-400"> <!></p> <div class="flex gap-2 justify-end"><!> <!></div></li>'),Da=m('<ul class="flex flex-col gap-2"></ul>'),ka=m('<p class="text-sm text-base-400">No active federations. Approve a pending request above to begin sharing channels.</p>'),qa=m('<div class="flex items-center justify-between gap-3"><span class="text-sm text-base-700 dark:text-base-300 truncate"> </span> <!></div>'),Ra=m('<p class="text-sm text-base-400">No channels to share.</p>'),Aa=m('<li class="rounded-2xl border border-base-200 dark:border-base-800 p-3"><div class="flex items-center justify-between gap-2 mb-2"><span class="text-sm font-semibold text-base-900 dark:text-base-100 truncate"> </span> <!></div> <div class="flex flex-col gap-2"><!> <!></div></li>'),Qa=m('<ul class="flex flex-col gap-3"></ul>'),Pa=m(`<div class="space-y-10 max-w-2xl"><section class="space-y-3"><h2 class="text-base font-semibold text-base-900 dark:text-base-100">Request federation</h2> <p class="text-sm text-base-400">Ask a space you're a member of to share channels with this space. An 3 admin of that space has to approve the request.</p> <p class="text-sm text-base-400">These 'federated' channels will then show up in this space's sidebar.</p> <!></section> <!> <section class="space-y-3"><h2 class="text-base font-semibold text-base-900 dark:text-base-100">Pending requests</h2> <!></section> <section class="space-y-3"><h2 class="text-base font-semibold text-base-900 dark:text-base-100">Shared channels</h2> <!></section></div>`);function Wa(N,x){Ce(x,!0);const A=y(()=>Ve.params.space),ne=Ye(()=>e(A)),M=y(()=>{var a;return((a=ne.data)==null?void 0:a.isAdmin)??!1}),oe=We(()=>e(A),{enabled:()=>e(M)}),xe=Ze(()=>e(A),{enabled:()=>e(M)}),ye=ea(()=>e(A),{enabled:()=>e(M)}),he=aa(()=>e(A),{enabled:()=>e(M)}),Se=Je(),de=y(()=>{const a=ne.data,c=[];for(const _ of(a==null?void 0:a.sidebar.categories)??[])for(const F of _.channels??[])c.push({id:F.id,name:F.name??F.id});for(const _ of(a==null?void 0:a.sidebar.orphans)??[])_.federated||c.push({id:_.id,name:_.n
3ame??_.id});return c});function we(a,c){var F,J;const _=(J=(F=he.data)==null?void 0:F.originGrants)==null?void 0:J.find(W=>W.federatingSpaceDid===a&&W.roomId===c);return(_==null?void 0:_.permission)??"none"}let B=X(null);const te=a=>e(B)===a,$e=[{label:"Off",value:"none"},{label:"Read",value:"read"},{label:"Read + write",value:"readwrite"}];async function Y(){for(const a of["space.roomy.federation.getGrants","space.roomy.federation.getRequests","space.roomy.federation.getIncoming","space.roomy.federation.getOutgoing"])await _e.invalidateQueries({queryKey:[a]});await _e.invalidateQueries({queryKey:["space.roomy.space.getMetadata"]})}async function le(a,c){b(B,`respond:${a}`);try{await ca(e(A),{federatingSpaceDid:a,approve:c}),await Y()}finally{b(B,null)}}async function De(a){if(confirm(`Remove the federation with ${a}? All shared channel access will be revoked.`)){b(B,`remove:${a}`);try{await pa(e(A),a),await Y()}finally{b(B,null)}}}async function ke(a,c,_){b(B,`og:${a}:${c}`);try{await va(e(A),{federatingSpaceDid:a,roomId:c,permission:_==="none"?null:_}),await Y()}finally{b(B,null)}}const se=y(()=>{var a;return((a=oe.data)==null?void 0:a.requests)??[]}),ce=y(()=>{var a;return(((a=xe.data)==null?void 0:a.federations)??[]).filter(c=>c.status==="active")}),pe=y(()=>{var a;return((a=ye.data)==null?void 0:a.federations)??[]}),ve=y(()=>e(pe).filter(a=>a.status!=="active")),qe=y(()=>{var a;return(((a=Se.data)==null?void 0:a.spaces)??[]).filter(c=>c.isMember&&c.id!==e(A))}),Re=y(()=>new Set(e(pe).filter(a=>a.status!=="removed").map(a=>a.originSpaceDid))),ue=y(()=>e(qe).filter(a=>!e(Re).has(a.id)));let G=X(""),I=X(""),E=X(null),L=X(!1);function Ae(a){switch(a){case"pending":return"Request pending approval";case"rejected":return"Request rejected";case"removed":return"Federation removed";default:return a}}function re(a,c){return a??c}function Qe(a){return a.requestedByName??a.requestedByHandle??a.requestedByDid}async function Pe(){if(!(!e(G)||e(L))){b(L,!0),b(E,null);try{await la(e(G),{federatingSpaceDid:e(A),...e(I).trim()?{message:e(I).trim()}:{}}),b(G,""),b(I,""),await Y()}catch(a){b(E,a instanceof Error?a.message:"Failed to send federation request",!0)}finally{b(L,!1)}}}var fe=Ke(),ze=K(fe);{var Ne=a=>{var c=ua();o(a,c)},je=a=>{var c=Pa(),_=d(c),F=l(d(_),6);{var J=s=>{var v=fa();o(s,v)},W=s=>{var v=_a(),h=d(v),n=d(h);n.value=n.__value="";var u=l(n);U(u,17,()=>e(ue),p=>p.id,(p,$)=>{var D=ma(),f=d(D,!0);i(D);var g={};T(()=>{z(f,e($).name??e($).id),g!==(g=e($).id)&&(D.value=(D.__value=e($).id)??"")}),o(p,D)}),i(h);var S=l(h,2);sa(S,{sizeVariant:"sm",placeholder:"Message to the other space's admins (optional)",get value(){return e(I)},set value(p){b(I,p,!0)}});var w=l(S,2);{var Q=p=>{ra(p,{get message(){return e(E)},class:"py-1"})};R(w,p=>{e(E)&&p(Q)})}var O=l(w,2),q=d(O);{let p=y(()=>!e(G)||e(L));V(q,{size:"sm",get disabled(){return e(p)},onclick:Pe,children:($,D)=>{var f=ga(),g=K(f);{var P=r=>{be(r,{class:"size-4 animate-spin"})},t=r=>{na(r,{class:"size-4"})};R(g,r=>{e(L)?r(P):r(t,!1)})}H(),o($,f)},$$slots:{default:!0}})}i(O),i(v),Ue(h,()=>e(G),p=>b(G,p)),o(s,v)};R(F,s=>{e(ue).length===0?s(J):s(W,!1)})}i(_);var me=l(_,2);{var Fe=s=>{var v=xa(),h=l(d(v),2);U(h,21,()=>e(ve),n=>n.originSpaceDid,(n,u)=>{var S=ba(),w=d(S),Q=d(w),O=d(Q,!0);i(Q);var q=l(Q,2),p=d(q),$=l(p);{var D=t=>{var r=Z();T(k=>z(r,`· requested ${k??""}`),[()=>new Date(e(u).requestedAt).toLocaleString()]),o(t,r)},f=t=>{var r=Z();T(k=>z(r,`· decided ${k??""}`),[()=>new Date(e(u).decidedAt).toLocaleString()]),o(t,r)};R($,t=>{e(u).status==="pending"?t(D):e(u).decidedAt&&t(f,1)})}i(q),i(w);var g=l(w,2);{var P=t=>{V(t,{variant:"secondary",size:"sm",get disabled(){return e(L)},onclick:()=>{b(G,e(u).originSpaceDid,!0),b(I,""),b(E,null)},children:(r,k)=>{H();var j=Z("Re-request");o(r,j)},$$slots:{default:!0}})};R(g,t=>{e(u).status==="removed"&&t(P)})}i(S),T((t,r)=>{z(O,t),z(p,`${r??""} `)},[()=>re(e(u).originSpaceName,e(u).originSpaceDid),()=>Ae(e(u).status)]),o(n,S)}),i(h),i(v),o(s,v)};R(me,s=>{e(ve).length>0&&s(Fe)})}var ie=l(me,2),Oe=l(d(ie),2);{var Te=s=>{be(s,{class:"animate-spin"})},Be=s=>{var v=ya();o(s,v)},Ge=s=>{var v=Da();U(v,21,()=>e(se),h=>h.federatingSpaceDid,(h,n)=>{var u=$a(),S=d(u),w=d(S);oa(w,{class:"size-4 shrink-0 text-accent-500"});var Q=l(w,2),O=d(Q,!0);i(Q),i(S);var q=l(S,2),p=d(q),$=l(p);{var D=t=>{var r=ha(),k=l(K(r));T(()=>z(k,`â${e(n).message??""}â`)),o(t,r)};R($,t=>{e(n).message&&t(D)})}i(q);var f=l(q,2),g=d(f);{let t=y(()=>te(`respond:${e(n).federatingSpaceDid}`));V(g,{variant:"ghost",size:"sm",get disabled(){return e(t)},onclick:()=>le(e(n).federatingSpaceDid,!1),children:(r,k)=>{var j=Sa(),C=K(j);da(C,{class:"size-4"}),H(),o(r,j)},$$slots:{default:!0}})}var P=l(g,2);{let t=y(()=>te(`respond:${e(n).federatingSpaceDid}`));V(P,{variant:"secondary",size:"sm",get disabled(){return e(t)},onclick:()=>le(e(n).federatingSpaceDid,!0),children:(r,k)=>{var j=wa(),C=K(j);ia(C,{class:"size-4"}),H(),o(r,j)},$$slots:{default:!0}})}i(f),i(u),T((t,r,k)=>{z(O,t),z(p,`Requested ${r??""} by ${k??""} `)},[()=>re(e(n).federatingSpaceName,e(n).federatingSpaceDid),()=>
3new Date(e(n).requestedAt).toLocaleString(),()=>Qe(e(n))]),o(h,u)}),i(v),o(s,v)};R(Oe,s=>{oe.isPending&&e(se).length===0?s(Te):e(se).length===0?s(Be,1):s(Ge,!1)})}i(ie);var ge=l(ie,2),Ie=l(d(ge),2);{var Le=s=>{var v=ka();o(s,v)},Me=s=>{var v=Qa();U(v,21,()=>e(ce),h=>h.federatingSpaceDid,(h,n)=>{var u=Aa(),S=d(u),w=d(S),Q=d(w,!0);i(w);var O=l(w,2);{let f=y(()=>te(`remove:${e(n).federatingSpaceDid}`));V(O,{variant:"ghost",size:"sm",class:"text-red-600",get disabled(){return e(f)},onclick:()=>De(e(n).federatingSpaceDid),children:(g,P)=>{H();var t=Z("Remove");o(g,t)},$$slots:{default:!0}})}i(S);var q=l(S,2),p=d(q);U(p,17,()=>e(de),He,(f,g)=>{var P=qa(),t=d(P),r=d(t,!0);i(t);var k=l(t,2);{let j=y(()=>`og:${e(n).federatingSpaceDid}:${e(g).id}`),C=y(()=>we(e(n).federatingSpaceDid,e(g).id));ta(k,{get name(){return e(j)},get value(){return e(C)},get options(){return $e},onchange:Ee=>ke(e(n).federatingSpaceDid,e(g).id,Ee)})}i(P),T(()=>z(r,e(g).name)),o(f,P)});var $=l(p,2);{var D=f=>{var g=Ra();o(f,g)};R($,f=>{e(de).length===0&&f(D)})}i(q),i(u),T(f=>z(Q,f),[()=>re(e(n).federatingSpaceName,e(n).federatingSpaceDid)]),o(h,u)}),i(v),o(s,v)};R(Ie,s=>{e(ce).length===0?s(Le):s(Me,!1)})}i(ge),i(c),o(a,c)};R(ze,a=>{e(M)?a(je,!1):a(Ne)})}o(N,fe),Xe()}export{Wa 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.