live-sfu-demo/internal/server/static/assets/rooms-DcveOed7.js

1 line
10 KiB
JavaScript

import{B as e,C as t,H as n,K as r,M as i,P as a,R as o,S as s,W as c,Y as l,_ as u,a as d,k as f,l as p,m,n as h,o as ee,r as g,t as _,v,w as y}from"./ui-CzB-gjVP.js";import{t as b}from"./arrow-right-BaPiev--.js";import{i as x,n as S,r as C,t as te}from"./users-D7ZZ6mzL.js";import{t as w}from"./radio-tower-UMy9OSpZ.js";import{r as T,t as ne}from"./index-BTRwyDO1.js";var E=[[`path`,{d:`M11 20H2`,key:`nlcfvz`}],[`path`,{d:`M11 4.562v16.157a1 1 0 0 0 1.242.97L19 20V5.562a2 2 0 0 0-1.515-1.94l-4-1A2 2 0 0 0 11 4.561z`,key:`au4z13`}],[`path`,{d:`M11 4H8a2 2 0 0 0-2 2v14`,key:`74r1mk`}],[`path`,{d:`M14 12h.01`,key:`1jfl7z`}],[`path`,{d:`M22 20h-3`,key:`vhrsz`}]],D=e=>o(v,r(e,{iconNode:E,name:`door-open`})),O=[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]],k=e=>o(v,r(e,{iconNode:O,name:`search`})),A=f(`<div><p class="mono-label text-muted-foreground">rooms / registry</p><h1 class="display mt-2 text-4xl sm:text-5xl">房间</h1><p class="mt-3 max-w-xl text-sm text-muted-foreground">创建或进入房间。已接入新分页查询(<code class=font-mono>/api/rooms/query</code>)与管理面创建(<code class=font-mono>/api/manage/rooms</code>),支持搜索、公开度与成员统计。`),j=f(`<input class="h-8 flex-1 border border-line bg-background px-2 text-xs outline-none"placeholder=描述(可选)>`),M=f(`<label class="flex items-center gap-1.5 text-xs"><input type=checkbox>`),N=f(`<div class="flex flex-wrap items-center gap-3 border-t border-line/50 pt-3"><label class="flex items-center gap-2 text-xs"><input type=checkbox>高级`),re=f(`<div class="relative max-w-3xl border border-line bg-card/60 p-3 sm:p-4"><div class="flex flex-col gap-3"><div class="flex flex-col gap-2 sm:flex-row"><div class="flex h-10 flex-1 items-center gap-2.5 border border-line bg-background/70 px-3 transition-colors focus-within:border-ring"><input class="field-mono h-full w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground/50"placeholder="新房间名,如 live-demo"aria-label=房间名>`),ie=f(`<span class="mono-label animate-pulse text-muted-foreground">loading…`),ae=f(`<div class="flex items-center justify-between gap-3 border-b border-line pb-3"><h2 class="flex items-center gap-2 font-semibold">房间列表`),oe=f(`<div class=space-y-2>`),se=f(`<div class="mx-auto max-w-[1400px] space-y-8 px-4 py-8 sm:px-6 sm:py-10"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"><div class="flex flex-1 items-center gap-2"><div class="flex h-9 flex-1 max-w-sm items-center gap-2 border border-line bg-background px-3"><input class="h-full w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground/50"placeholder="搜索房间名 / 展示名"></div></div><div class="flex items-center gap-2 text-xs text-muted-foreground"><span class=font-mono> rooms · 第 <!>/<!> 页</span></div></div><section class=space-y-3>`),ce=f(`<div class="flex flex-col items-center gap-3 border border-dashed border-line px-6 py-12 text-center"><span class="flex size-10 items-center justify-center border border-line bg-card text-muted-foreground"></span><div><p class=font-medium>暂无房间</p><p class="mt-1 text-sm text-muted-foreground">`),le=f(`<span class="font-mono text-xs text-muted-foreground">/`),ue=f(`<span class=truncate>· `),de=f(`<div class="group relative border border-line/70 bg-card/40 px-4 py-4 transition-colors hover:border-line hover:bg-accent/30 sm:px-5"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"><div class="flex min-w-0 flex-1 items-start gap-3"><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-2"><p class="display truncate text-xl sm:text-2xl"></p></div><div class="mt-1 flex flex-wrap items-center gap-3 text-xs text-muted-foreground"><span class="flex items-center gap-1"></span><span class="flex items-center gap-1"> 成员</span><span class=font-mono> 路分发</span></div></div></div><div class="flex shrink-0 items-center gap-2">`),P=()=>{let r=T(),[s,f]=c([]),[v,E]=c(0),[O,P]=c(1),[F,I]=c(``),[L,R]=c(``),[z,B]=c(``),[V,H]=c(!1),[U,W]=c(``),[fe,G]=c(!1),[K,q]=c(``),[J,pe]=c(!0),[Y,me]=c(!1),X=async()=>{G(!0),W(``);try{if(m.isAdminOrAbove())try{let e=((await u.manageRooms()).rooms||[]).map(e=>({name:e.room.name,display_name:e.room.display_name,description:e.room.description,creator:e.room.creator,is_public:e.room.is_public,status:e.room.status,member_count:e.member_count,targets:e.targets,live:e.live,created_at:e.room.created_at})),t=F().trim().toLowerCase();t&&(e=e.filter(e=>e.name.toLowerCase().includes(t)||e.display_name&&e.display_name.toLowerCase().includes(t))),E(e.length);let n=(O()-1)*12;f(e.slice(n,n+12));return}catch{}try{let e=await u.queryRooms({page:O(),page_size:12,search:F().trim()||void 0}),t=(e.rooms||[]).map(e=>({name:e.name,display_name:e.display_name,description:e.description,creator:e.creator,is_public:e.is_public,status:e.status,member_count:e.member_count??0,targets:[],live:!1,created_at:e.created_at}));try{let e=await u.listRooms(),n=new Map((e.rooms||[]).map(e=>[e.name,(e.targets?.length??0)>0?e.targets:[]]));for(let e of t){let t=n.get(e.name);t&&(e.targets=t,e.live=t.length>0)}}catch{}f(t),E(e.total??t.length);return}catch{}let e=((await u.listRooms()).rooms||[]).map(e=>({name:e.name,display_name:e.name,description:``,creator:``,is_public:!0,status:`active`,member_count:0,targets:e.targets||[],live:(e.targets?.length??0)>0})),t=F().trim().toLowerCase();t&&(e=e.filter(e=>e.name.toLowerCase().includes(t))),E(e.length);let n=(O()-1)*12;f(e.slice(n,n+12))}catch(e){W(String(e?.message||e))}finally{G(!1)}};e(()=>{m.isAuthed()&&X()}),e(()=>{O(),F(),m.isAuthed()&&X()}),l(()=>m.isAuthed()&&X());let Z=()=>{I(L().trim()),P(1)},Q=async()=>{let e=z().trim();if(e){H(!0),W(``);try{if(m.isAdminOrAbove()&&Y())await u.manageCreateRoom({name:e,display_name:e,description:K().trim()||void 0,is_public:J(),require_approval:!1,max_members:100});else try{await u.manageCreateRoom({name:e,display_name:e,description:K().trim()||void 0,is_public:J()})}catch{await u.createRoom(e)}B(``),q(``),await X(),r({to:`/room`,search:{room:e}})}catch(e){W(String(e?.message||e))}finally{H(!1)}}},he=e=>r({to:`/room`,search:{room:e}}),$=()=>Math.max(1,Math.ceil(v()/12));return(()=>{var e=se(),r=e.firstChild,c=r.firstChild,l=c.firstChild,u=l.firstChild,f=c.nextSibling,T=f.firstChild,E=T.firstChild,H=E.nextSibling,W=H.nextSibling.nextSibling;W.nextSibling;var G=r.nextSibling;return t(e,o(p,{get children(){return A()}}),r),t(e,o(a,{get when(){return U()},get children(){return o(_,{tone:`error`,get children(){return U()}})}}),r),t(e,o(p,{delay:1,get children(){var e=re(),r=e.firstChild,i=r.firstChild,s=i.firstChild,c=s.firstChild;return t(e,o(d,{}),r),t(s,o(S,{class:`size-4 shrink-0 text-muted-foreground`}),c),c.$$keydown=e=>{e.key===`Enter`&&Q()},c.$$input=e=>B(e.currentTarget.value),t(i,o(g,{class:`h-10 shrink-0`,onClick:Q,get disabled(){return V()||!z().trim()},get children(){return[o(b,{class:`size-4`}),`创建并进入`]}}),null),t(r,o(a,{get when(){return m.isAdminOrAbove()},get children(){var e=N(),r=e.firstChild.firstChild;return r.addEventListener(`change`,e=>me(e.target.checked)),t(e,o(a,{get when(){return Y()},get children(){return[(()=>{var e=j();return e.$$input=e=>q(e.currentTarget.value),n(()=>e.value=K()),e})(),(()=>{var e=M(),r=e.firstChild;return r.addEventListener(`change`,e=>pe(e.target.checked)),t(e,(()=>{var e=y(()=>!!J());return()=>e()?o(x,{class:`size-3`}):o(C,{class:`size-3`})})(),null),t(e,()=>J()?`公开`:`私密`,null),n(()=>r.checked=J()),e})()]}}),null),n(()=>r.checked=Y()),e}}),null),n(()=>c.value=z()),e}}),r),t(l,o(k,{class:`size-4 text-muted-foreground`}),u),u.$$keydown=e=>{e.key===`Enter`&&Z()},u.$$input=e=>R(e.currentTarget.value),t(c,o(g,{variant:`outline`,class:`h-9`,onClick:Z,children:`搜索`}),null),t(c,o(a,{get when(){return F()},get children(){return o(g,{variant:`ghost`,class:`h-9`,onClick:()=>{R(``),I(``),P(1)},children:`清除`})}}),null),t(T,v,E),t(T,O,H),t(T,$,W),t(f,o(g,{variant:`outline`,class:`h-7 px-2 text-xs`,get disabled(){return O()<=1},onClick:()=>P(e=>Math.max(1,e-1)),children:`上一页`}),null),t(f,o(g,{variant:`outline`,class:`h-7 px-2 text-xs`,get disabled(){return O()>=$()},onClick:()=>P(e=>e+1),children:`下一页`}),null),t(G,o(p,{get children(){var e=ae(),n=e.firstChild,r=n.firstChild;return t(n,o(w,{class:`size-4 text-muted-foreground`}),r),t(e,o(a,{get when(){return fe()},get children(){return ie()}}),null),e}}),null),t(G,o(a,{get when(){return s().length>0},get fallback(){return(()=>{var e=ce(),n=e.firstChild,r=n.nextSibling.firstChild.nextSibling;return t(n,o(D,{class:`size-5`})),t(r,(()=>{var e=y(()=>!!F());return()=>e()?`无匹配 "${F()}" 的房间`:`创建一个房间后,分发拓扑会在这里出现。`})()),e})()},get children(){var e=oe();return t(e,o(i,{get each(){return s()},children:(e,n)=>o(p,{get delay(){return Math.min(n()+1,6)},get children(){var n=de(),r=n.firstChild,i=r.firstChild,s=i.firstChild,c=s.firstChild,l=c.firstChild,u=c.nextSibling,f=u.firstChild,p=f.nextSibling,m=p.firstChild,_=p.nextSibling,v=_.firstChild,S=i.nextSibling;return t(n,o(d,{}),r),t(i,o(ee,{get active(){return!!e.live}}),s),t(l,()=>e.display_name||e.name),t(c,o(a,{get when(){return e.name!==e.display_name},get children(){var n=le();return n.firstChild,t(n,()=>e.name,null),n}}),null),t(c,o(h,{get variant(){return e.live?`success`:`muted`},class:`text-[10px]`,get children(){return e.live?`LIVE`:`IDLE`}}),null),t(c,o(h,{variant:`outline`,class:`gap-1 text-[10px]`,get children(){return[y(()=>y(()=>e.is_public===!1)()?o(C,{class:`size-3`}):o(x,{class:`size-3`})),y(()=>e.is_public===!1?`私密`:`公开`)]}}),null),t(c,o(a,{get when(){return y(()=>!!e.status)()&&e.status!==`active`},get children(){return o(h,{variant:`outline`,class:`border-destructive/40 text-destructive text-[10px]`,get children(){return e.status}})}}),null),t(f,o(ne,{class:`size-3`}),null),t(f,()=>e.creator||`-`,null),t(p,o(te,{class:`size-3`}),m),t(p,()=>e.member_count??0,m),t(_,()=>e.targets?.length??0,v),t(u,o(a,{get when(){return e.description},get children(){var n=ue();return n.firstChild,t(n,()=>e.description,null),n}}),null),t(S,o(g,{variant:`outline`,class:`h-9`,onClick:()=>he(e.name),get children(){return[`进入房间`,o(b,{class:`size-4`})]}})),n}})})),e}}),null),n(()=>u.value=L()),e})()};s([`input`,`keydown`]);export{P as Rooms};