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