@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
10 lines (9 loc) • 4.92 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ae=require("react"),ie=require("../utils/GridContext.js"),le=require("@progress/kendo-react-buttons"),ce=require("@progress/kendo-svg-icons"),v=require("axios"),ue=require("@progress/kendo-react-intl"),i=require("../messages/index.js"),G=require("@progress/kendo-react-common"),de=require("@progress/kendo-react-dialogs"),pe=require("./ai-tool/GridAIPrompt.js"),D=require("../filterCommon.js");function ge(s){const u=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const t in s)if(t!=="default"){const c=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(u,t,c.get?c:{enumerable:!0,get:()=>s[t]})}}return u.default=s,Object.freeze(u)}const o=ge(ae),fe=(s,u)=>s.map(c=>{let p=c;return u.forEach(d=>{d.field&&p.includes(d.field)&&(p=p.replace(new RegExp(d.field,"g"),d.title||d.field))}),p}),L=o.forwardRef((s,u)=>{const t=o.useContext(ie.GridContext),c=ue.useLocalization(),{requestUrl:p,requestOptions:d,onPromptRequest:y,onResponseSuccess:O,onResponseError:P,role:W="user",gridAIPrompt:B=pe.GridAIPrompt,icon:x,svgIcon:F,onCloseWindow:A,promptPlaceHolder:M,suggestionsList:z,streaming:H,loading:N,outputs:_,enableSpeechToText:$}=s,[R,E]=o.useState([]),K=o.useMemo(()=>t&&Array.isArray(t.columnsRef)?t.columnsRef.map(e=>({field:e.field})):[],[t]),[U,h]=o.useState(!1),[I,w]=o.useState(!1),[X,Y]=o.useState(),[J,Q]=o.useState(),g=o.useRef(null),k=o.useRef(null),V=e=>{e.preventDefault(),w(!I)},C=o.useMemo(()=>{var e;return(e=s.show)!=null?e:I},[s.show,I]),b=o.useCallback(()=>{var e;A&&A(),E([]),w(!1),g.current&&((e=g.current.element)==null||e.focus())},[A]),Z=(e,r,f)=>{var l,S;if(h(!1),e!=null&&e.data){if(t.sortable&&e.data.sort)if(e.data.sort.length===0)t.sortChange([],e);else{const a=(l=t.sort)!=null?l:[],n=[];a.forEach(m=>{e.data.sort.some(T=>T.field===m.field)||n.push(m)}),n.push(...e.data.sort),t.sortChange(n,e)}if(e.data.filter){const a=D.combineSmartFilters(e.data.filter,t.filter);t.filterChange(a,e)}if(e.data.highlight){let a=e.data.highlight;Array.isArray(a)&&(a=a.map(n=>(n!=null&&n.filters&&Array.isArray(n.filters)&&D.parseFilterDates(n),n))),t.applyHighlightDescriptor(a)}if(t&&e.data.group)if(e.data.group.length===0)t.groupChange([],e);else{const a=(S=t.group)!=null?S:[],n=[];a.forEach(m=>{e.data.group.some(T=>T.field===m.field)||n.push(m)}),n.push(...e.data.group),t.groupChange(n,e)}if(e.data.messages){const a=[c.toLanguageString(i.aIResponseData,i.messages[i.aIResponseData])],n=fe(e.data.messages,t.columnsRef).join(`
`);E([{id:R.length+1,title:c.toLanguageString(i.generatedWithAI,i.messages[i.generatedWithAI]),subTitle:r,prompt:r,responseContent:a.concat(n).join(""),isRetry:f},...R])}}O&&O(e,r,f)},q=e=>{P&&P(e),h(!1)},ee=(e,r)=>{const f=v.CancelToken.source(),l={role:"user",columns:K||[],headers:{Accept:"*/*","Content-Type":"application/json"},promptMessage:e,requestOptions:{url:p,method:"POST",withCredentials:!1,responseType:"json",cancelToken:f.token,...d}};y&&y(l,r),l.requestOptions.url!==void 0&&(h(!0),v({...l.requestOptions,headers:l.headers,data:{role:W||l.role,contents:[{$type:"text",text:l.promptMessage}],columns:l.columns||[]},...s.requestOptions}).then(S=>Z(S,l.promptMessage,r)).catch(q),k.current=f)},te=o.useCallback(()=>{k.current&&k.current.cancel("Request cancelled by user."),h(!1)},[]),[oe,j]=G.useCustomComponent(B),ne=Object.keys(j).length>0?j:{},se=o.createElement(oe,{onPromptRequest:ee,onCancel:te,onClose:b,streaming:H||U,loading:N,outputs:_||R,promptPlaceHolder:M,suggestionsList:z,enableSpeechToText:$,...ne}),re=o.createElement(le.Button,{ref:g,togglable:!0,themeColor:"primary",rounded:"full",selected:C,svgIcon:F||(x?void 0:ce.sparklesIcon),icon:x,size:t.mobileMode?"large":"medium",className:G.classNames("k-toolbar-button",{"k-icon-button":t.mobileMode}),title:c.toLanguageString(i.toolbarAI,i.messages[i.toolbarAI]),onClick:V});return o.useEffect(()=>{var e;if(g.current&&C){const r=(e=g.current.element)==null?void 0:e.getBoundingClientRect();r&&(Y(r.top+window.scrollY+r.height),Q(r.left+window.scrollX+r.width))}},[C]),o.useImperativeHandle(u,()=>({show:()=>w(!0),hide:()=>b()}),[b]),o.createElement(o.Fragment,null,re,C&&o.createElement(de.Window,{autoFocus:!1,title:c.toLanguageString(i.toolbarAI,i.messages[i.toolbarAI]),initialTop:X,initialLeft:J,initialWidth:520,initialHeight:500,onClose:b,resizable:!0,draggable:!0,className:"k-grid-assistant-window"},se))});L.displayName="KendoReactGridToolbarAIAssistant";exports.GridToolbarAIAssistant=L;