UNPKG

p3x-redis-ui-material

Version:

💿 P3X Redis UI triple frontend — Angular + React/MUI + Vue/Vuetify with 54 languages, 7 themes, Socket.IO, desktop notifications, and full feature parity

1 lines • 10.2 kB
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{h as t,lt as n,t as r}from"./Box-DSXpVc0K.js";import{n as i,o as a}from"./i18n.store-ZJjZbIIr.js";import{r as o}from"./KeyboardArrowDown-D_jWdzEv.js";import{n as s,s as c,t as l,u as ee}from"./TextField-CfzwSAUF.js";import{i as te,n as ne,r as re,t as u}from"./Delete-XFKHCDuD.js";import{t as d}from"./ListItem-DNQFRYWX.js";import{t as ie}from"./List-DUtnswD8.js";import{i as ae,n as oe,r as se,t as ce}from"./SkipPrevious-D216pu4I.js";import{r as f}from"./redis-state.store-C55NDKx3.js";import{B as p,R as le,V as m,_ as ue,d as h,m as de,r as g,x as fe,z as pe}from"./index-O55eiSgD.js";import{t as me}from"./redis-version-D5h1AGvN.js";import{t as _}from"./P3xrAccordion-D_hsG8TZ.js";var v=n(),he=t((0,v.jsx)(`path`,{d:`M19 13H5v-2h14z`}),`Remove`),y=e(a());function b(){let e=i(e=>e.strings),t=f(e=>e.connection),{toast:n,confirm:a,generalHandleError:b}=ue(),x=de(),ge=le(`(min-width: 960px)`),S=t?.readonly===!0,[C,_e]=(0,y.useState)([]),[w,T]=(0,y.useState)(``),[E,ve]=(0,y.useState)(`*`),[D,O]=(0,y.useState)(0),[k,A]=(0,y.useState)(0),[j,M]=(0,y.useState)([]),[N,P]=(0,y.useState)(null),[ye,F]=(0,y.useState)(!1),[I,L]=(0,y.useState)(!1),[R,be]=(0,y.useState)(!1),[z,xe]=(0,y.useState)(``),[B,Se]=(0,y.useState)(``),[Ce,we]=(0,y.useState)(10),[V,Te]=(0,y.useState)(``),[H,Ee]=(0,y.useState)(``),[U,W]=(0,y.useState)([{name:``,type:`TEXT`,sortable:!1}]),G=Math.ceil(k/20),De=Math.floor(D/20)+1,K=e=>Object.keys(e).filter(e=>e!==`_key`),q=(0,y.useCallback)(async()=>{try{let e=await h({action:`search/list`,payload:{}});return _e(e.data),e.data}catch{return[]}},[]),J=(0,y.useCallback)(async e=>{let t=e||w;if(t)try{let e=await h({action:`search/index-info`,payload:{index:t}});P(e.data)}catch(e){b(e)}},[w,b]),Y=(0,y.useCallback)(async e=>{if(!(!w||!E))try{let t;if(R&&z&&B){let n=B.split(`,`).map(e=>parseFloat(e.trim())).filter(e=>!isNaN(e));t=await h({action:`search/hybrid`,payload:{index:w,query:E,vectorField:z,vectorValues:n,count:Ce,offset:e??D,limit:20}})}else t=await h({action:`search/query`,payload:{index:w,query:E,offset:e??D,limit:20}});A(t.data.total),M(t.data.docs)}catch(e){b(e),M([]),A(0)}finally{F(!0)}},[w,E,D,b]),X=(0,y.useCallback)(async e=>{if(e){L(!0);try{let t=await h({action:`ai/redis-query`,payload:{prompt:e,context:{indexes:C,schema:N}}});ve(t.command),t.explanation&&n(t.explanation),O(0);let r=await h({action:`search/query`,payload:{index:w,query:t.command,offset:0,limit:20}});A(r.data.total),M(r.data.docs),F(!0),await J()}catch(e){b(e)}finally{L(!1)}}},[C,N,w,n,J,b]),Oe=(0,y.useCallback)(async()=>{let e=(E||``).trim();if(/^ai:\s*/i.test(e)){await X(e.replace(/^ai:\s*/i,``).trim());return}try{await Promise.all([Y(0),J()])}catch{if(e.length>2&&e!==`*`&&/\s/.test(e)){x.show();try{await X(e)}finally{x.hide()}}}},[E,Y,J,X,x]),Z=(0,y.useCallback)(e=>{let t=D;switch(e){case`first`:t=0;break;case`prev`:t=Math.max(0,D-20);break;case`next`:t=Math.min((G-1)*20,D+20);break;case`last`:t=(G-1)*20}O(t),Y(t)},[D,G,Y]),ke=(0,y.useCallback)(async()=>{if(w)try{await a({message:e?.confirm?.dropIndex}),await h({action:`search/index-drop`,payload:{index:w}}),n(e?.status?.indexDropped),T(``),M([]),A(0),F(!1),P(null),await q()}catch(e){e!==void 0&&b(e)}},[w,e,a,n,q,b]),Ae=()=>W(e=>[...e,{name:``,type:`TEXT`,sortable:!1}]),je=(0,y.useCallback)(async t=>{try{await a({message:e?.intention?.delete+`?`}),W(e=>e.filter((e,n)=>n!==t))}catch(e){e!==void 0&&b(e)}},[e,a,b]),Me=(0,y.useCallback)(async()=>{if(!V.trim())return;let t=U.filter(e=>e.name.trim());if(t.length!==0)try{await h({action:`search/index-create`,payload:{name:V.trim(),prefix:H.trim()||void 0,schema:t}}),n(e?.status?.indexCreated),Te(``),Ee(``),W([{name:``,type:`TEXT`,sortable:!1}]),await q()}catch(e){b(e)}},[V,H,U,e,n,q,b]),Ne=t?.id;(0,y.useEffect)(()=>{T(``),M([]),A(0),F(!1),P(null),q().then(e=>{e.length>0&&(T(e[0]),J(e[0]))})},[Ne]);let Pe=e=>{T(e),O(0),P(null),J(e)},Q=e?.page?.search||{},$=({icon:e,label:t,color:n=`primary`,onClick:r,disabled:i})=>ge?(0,v.jsxs)(m,{variant:`contained`,color:n,size:`small`,onClick:r,disabled:i,sx:{gap:`3px`},children:[e,(0,v.jsx)(`span`,{children:t})]}):(0,v.jsx)(o,{title:t,placement:`top`,children:(0,v.jsx)(`span`,{children:(0,v.jsx)(m,{variant:`contained`,color:n,onClick:r,disabled:i,sx:{minWidth:40,width:40,height:40,p:0,borderRadius:`4px`},children:e})})});return(0,v.jsxs)(r,{children:[(0,v.jsx)(_,{title:Q.title,accordionKey:`search-query`,children:(0,v.jsxs)(r,{sx:{p:2},children:[C.length===0&&(0,v.jsx)(r,{sx:{opacity:.5},children:Q.noIndex}),C.length>0&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(r,{sx:{display:`flex`,alignItems:`center`,gap:1},children:[(0,v.jsxs)(ee,{fullWidth:!0,size:`small`,children:[(0,v.jsx)(c,{children:Q.index}),(0,v.jsx)(s,{value:w,label:Q.index,onChange:e=>Pe(e.target.value),children:C.map(e=>(0,v.jsx)(pe,{value:e,children:e},e))})]}),!S&&w&&(0,v.jsx)(o,{title:Q.dropIndex,children:(0,v.jsx)(m,{variant:`contained`,color:`error`,onClick:ke,sx:{minWidth:40,width:40,height:40,p:0,borderRadius:`4px`},children:(0,v.jsx)(u,{fontSize:`small`})})})]}),(0,v.jsx)(l,{fullWidth:!0,size:`small`,sx:{mt:1},label:Q.query,value:E,onChange:e=>ve(e.target.value),disabled:I,onKeyDown:e=>{e.key===`Enter`&&(O(0),Oe())}}),me(f.getState().info?.server?.redis_version).isAtLeast(8,4)&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(te,{sx:{mt:1},control:(0,v.jsx)(re,{checked:R,onChange:(e,t)=>be(t),color:`primary`}),label:Q.hybridMode}),R&&(0,v.jsxs)(r,{sx:{display:`flex`,gap:1,flexWrap:`wrap`,mt:1},children:[(0,v.jsx)(l,{size:`small`,sx:{flex:1,minWidth:150},label:Q.vectorField,placeholder:`embedding`,value:z,onChange:e=>xe(e.target.value)}),(0,v.jsx)(l,{size:`small`,sx:{flex:2,minWidth:200},label:Q.vectorValues,placeholder:`0.1, 0.2, 0.3, ...`,value:B,onChange:e=>Se(e.target.value)}),(0,v.jsx)(l,{size:`small`,sx:{width:80},type:`number`,label:`Count`,value:Ce,onChange:e=>we(parseInt(e.target.value)||10)})]})]}),(0,v.jsx)(r,{sx:{mt:1,textAlign:`right`},children:(0,v.jsx)($,{icon:(0,v.jsx)(fe,{fontSize:`small`}),label:I?e?.label?.aiTranslating:Q.title,onClick:()=>{O(0),Oe()},disabled:I})})]})]})}),ye&&k===0&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(r,{sx:{mt:1}}),(0,v.jsx)(_,{title:`${Q.results} (0)`,accordionKey:`search-results`,children:(0,v.jsx)(r,{sx:{p:2,opacity:.5},children:e?.label?.noResults})})]}),(j.length>0||k>0)&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(r,{sx:{mt:1}}),(0,v.jsx)(_,{title:`${Q.results} (${k})`,accordionKey:`search-results`,actions:G>1?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(g,{icon:(0,v.jsx)(ce,{sx:{fontSize:18}}),label:``,color:`inherit`,onClick:e=>{e.stopPropagation(),Z(`first`)}}),(0,v.jsx)(g,{icon:(0,v.jsx)(ae,{sx:{fontSize:18}}),label:``,color:`inherit`,onClick:e=>{e.stopPropagation(),Z(`prev`)}}),(0,v.jsxs)(r,{component:`span`,sx:{fontSize:12,opacity:.7},children:[De,` / `,G]}),(0,v.jsx)(g,{icon:(0,v.jsx)(se,{sx:{fontSize:18}}),label:``,color:`inherit`,onClick:e=>{e.stopPropagation(),Z(`next`)}}),(0,v.jsx)(g,{icon:(0,v.jsx)(oe,{sx:{fontSize:18}}),label:``,color:`inherit`,onClick:e=>{e.stopPropagation(),Z(`last`)}})]}):void 0,children:(0,v.jsx)(ie,{disablePadding:!0,children:j.map(e=>(0,v.jsxs)(r,{children:[(0,v.jsx)(d,{sx:{px:2,py:1},children:(0,v.jsxs)(r,{sx:{display:`flex`,width:`100%`,alignItems:`center`},children:[(0,v.jsx)(r,{sx:{flex:1},children:(0,v.jsx)(r,{component:`kbd`,sx:{px:`6px`,py:`2px`,borderRadius:`4px`,fontSize:11,bgcolor:`action.hover`,fontFamily:`'Roboto Mono', monospace`},children:e._key})}),(0,v.jsx)(r,{sx:{fontFamily:`'Roboto Mono', monospace`,fontSize:12},children:K(e).map((t,n)=>(0,v.jsxs)(`span`,{children:[t,`: `,e[t],n<K(e).length-1&&` · `]},t))})]})}),(0,v.jsx)(p,{})]},e._key))})})]}),w&&N&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(r,{sx:{mt:1}}),(0,v.jsx)(_,{title:`${Q.indexInfo}: ${w}`,accordionKey:`search-index-info`,actions:S?void 0:(0,v.jsx)(g,{icon:(0,v.jsx)(u,{sx:{fontSize:18}}),label:Q.dropIndex,color:`inherit`,onClick:e=>{e.stopPropagation(),ke()}}),children:(0,v.jsx)(ie,{disablePadding:!0,children:K(N).map(e=>(0,v.jsxs)(r,{children:[(0,v.jsx)(d,{sx:{px:2,py:1},children:(0,v.jsxs)(r,{sx:{display:`flex`,width:`100%`},children:[(0,v.jsx)(r,{sx:{flex:1},children:e}),(0,v.jsx)(r,{sx:{fontFamily:`'Roboto Mono', monospace`,fontSize:12},children:JSON.stringify(N[e])})]})}),(0,v.jsx)(p,{})]},e))})})]}),!S&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(r,{sx:{mt:1}}),(0,v.jsx)(_,{title:Q.createIndex,accordionKey:`search-create-index`,children:(0,v.jsxs)(r,{sx:{p:2},children:[(0,v.jsx)(l,{fullWidth:!0,size:`small`,label:Q.indexName,value:V,onChange:e=>Te(e.target.value)}),(0,v.jsx)(l,{fullWidth:!0,size:`small`,sx:{mt:1},label:Q.prefix,placeholder:`e.g. doc:`,value:H,onChange:e=>Ee(e.target.value)}),(0,v.jsxs)(r,{sx:{display:`flex`,alignItems:`center`,gap:1,my:1},children:[(0,v.jsx)(`strong`,{children:`Schema`}),(0,v.jsx)(o,{title:`Add`,children:(0,v.jsx)(m,{variant:`contained`,color:`primary`,onClick:Ae,sx:{minWidth:40,width:40,height:40,p:0,borderRadius:`4px`},children:(0,v.jsx)(ne,{fontSize:`small`})})})]}),U.map((t,n)=>(0,v.jsxs)(r,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.5,flexWrap:`wrap`},children:[(0,v.jsx)(l,{size:`small`,sx:{flex:1,minWidth:120},label:Q.fieldName,value:t.name,onChange:e=>{let t=[...U];t[n]={...t[n],name:e.target.value},W(t)}}),(0,v.jsxs)(r,{sx:{display:`flex`,alignItems:`center`,gap:1,flexShrink:0},children:[(0,v.jsxs)(ee,{size:`small`,sx:{width:130},children:[(0,v.jsx)(c,{children:e?.label?.type}),(0,v.jsx)(s,{value:t.type,label:e?.label?.type,onChange:e=>{let t=[...U];t[n]={...t[n],type:e.target.value},W(t)},children:[`TEXT`,`NUMERIC`,`TAG`,`GEO`,`VECTOR`].map(e=>(0,v.jsx)(pe,{value:e,children:e},e))})]}),(0,v.jsx)(o,{title:e?.intention?.delete,children:(0,v.jsx)(`span`,{children:(0,v.jsx)(m,{variant:`contained`,color:`error`,onClick:()=>je(n),disabled:U.length<=1,sx:{minWidth:40,width:40,height:40,p:0,borderRadius:`4px`},children:(0,v.jsx)(he,{fontSize:`small`})})})})]})]},n)),(0,v.jsx)(r,{sx:{mt:1,textAlign:`right`},children:(0,v.jsx)($,{icon:(0,v.jsx)(ne,{fontSize:`small`}),label:Q.createIndex,color:`secondary`,onClick:Me,disabled:!V.trim()})})]})})]})]})}export{b as default};