@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
10 lines (9 loc) • 5.37 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 ue=require("react"),de=require("../utils/GridContext.js"),pe=require("@progress/kendo-react-buttons"),ge=require("@progress/kendo-svg-icons"),v=require("axios"),fe=require("@progress/kendo-react-intl"),r=require("../messages/index.js"),E=require("@progress/kendo-react-common"),me=require("@progress/kendo-react-dialogs"),he=require("./ai-tool/GridAIPrompt.js"),Ce=require("../utils/handleAIResponse.js");function Se(i){const u=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const e in i)if(e!=="default"){const c=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(u,e,c.get?c:{enumerable:!0,get:()=>i[e]})}}return u.default=i,Object.freeze(u)}const n=Se(ue),L=768,Ie=(i,u)=>i.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}),be=()=>null,j=n.forwardRef((i,u)=>{const e=n.useContext(de.GridContext),c=fe.useLocalization(),{requestUrl:p,requestOptions:d,onPromptRequest:y,onResponseSuccess:P,onResponseError:b,role:D="user",gridAIPrompt:B=he.GridAIPrompt,icon:x,svgIcon:G,onCloseWindow:k,promptPlaceHolder:M,suggestionsList:z,streaming:N,loading:H,outputs:K,enableSpeechToText:_}=i,[A,O]=n.useState([]),F=n.useMemo(()=>e&&Array.isArray(e.columnsRef)&&Array.isArray(e.hiddenColumnsRef)?[...e.columnsRef,...e.hiddenColumnsRef].map(t=>{var o;return{id:t.id,field:t.field,values:(o=t.values)!=null?o:[]}}):[],[e]),[U,f]=n.useState(!1),[X,m]=n.useState(!1),[R,w]=n.useState(!1),[Y,$]=n.useState(),[J,Q]=n.useState(),[q,V]=n.useState(()=>{const t=window.innerWidth;return t<L?t*.8:560}),g=n.useRef(null),T=n.useRef(null),Z=t=>{t.preventDefault(),w(!R)},h=n.useMemo(()=>{var t;return(t=i.show)!=null?t:R},[i.show,R]),C=n.useCallback(()=>{var t;k&&k(),O([]),w(!1),g.current&&((t=g.current.element)==null||t.focus())},[k]),ee=(t,o,l)=>{const a=[c.toLanguageString(r.aIResponseData,r.messages[r.aIResponseData])],s=Ie([t],e.columnsRef).join(`
`);O([{id:A.length+1,title:c.toLanguageString(r.generatedWithAI,r.messages[r.generatedWithAI]),subTitle:o,prompt:o,responseContent:a.concat(s).join(""),isRetry:l},...A])},te=(t,o,l)=>{var S,I;f(!1),m(!1);const a={getTotal:()=>e.getTotal(),getLeafDataItems:()=>e.getLeafDataItems(),exportAsPdf:()=>e.exportAsPdf(),props:{dataItemKey:e.dataItemKey}},s=Ce.handleAIResponse(t,e,a);s.state.sort!==e.sort&&e.sortChange(s.state.sort,t),s.state.filter!==e.filter&&e.filterChange(s.state.filter,t),s.state.group!==e.group&&e.groupChange(s.state.group,t),s.state.highlight!==e.highlight&&e.applyHighlightDescriptor(s.state.highlight),s.state.select!==e.select&&e.applySelectionDescriptor(s.state.select),s.state.columnsState!==e.columnsState&&e.onColumnsStateChange(s.state.columnsState),(s.state.skip!==e.skip||s.state.take!==e.take)&&e.pagerPageChange({skip:(S=s.state.skip)!=null?S:0,take:(I=s.state.take)!=null?I:0,syntheticEvent:t}),s.shouldExportPdf&&e.exportAsPdf(),s.messages.length>0&&s.messages.forEach(ce=>{ee(ce,o,l)}),P&&P(t,o,l)},se=t=>{b==null||b(t),f(!1),m(!1)},ne=(t,o)=>{const l=v.CancelToken.source(),a={role:D||"user",columns:F||[],headers:{Accept:"*/*","Content-Type":"application/json"},promptMessage:t,requestOptions:{url:p,method:"POST",withCredentials:!1,responseType:"json",cancelToken:l.token,...d}};if(y&&y(a,o),a.requestOptions.url!==void 0){f(!0),m(!0);const{url:s,...S}=a.requestOptions;s&&(v(s,{...S,headers:a.headers,data:{columns:a.columns,contents:[{text:a.promptMessage}]},responseType:"json"}).then(I=>te(I,a.promptMessage,o)).catch(se),T.current=l)}},oe=n.useCallback(()=>{T.current&&T.current.cancel("Request cancelled by user."),f(!1),m(!1)},[]),[ae,W]=E.useCustomComponent(B),re=Object.keys(W).length>0?W:{},ie=n.createElement(ae,{onPromptRequest:ne,onCancel:oe,onClose:C,streaming:N||U,loading:H||X,outputs:K||A,promptPlaceHolder:M,suggestionsList:z,enableSpeechToText:_,...re}),le=n.createElement(pe.Button,{ref:g,togglable:!0,themeColor:"primary",rounded:"full",selected:h,svgIcon:G||(x?void 0:ge.sparklesIcon),icon:x,size:e.mobileMode?"large":"medium",className:E.classNames("k-toolbar-button",{"k-icon-button":e.mobileMode}),title:c.toLanguageString(r.toolbarAI,r.messages[r.toolbarAI]),onClick:Z});return n.useEffect(()=>{var t;if(g.current&&h){const o=(t=g.current.element)==null?void 0:t.getBoundingClientRect();if(o){$(o.top+window.scrollY+o.height),Q(o.left+window.scrollX+o.width);const l=window.innerWidth,a=l<L?l*.75:560;V(a)}}},[h]),n.useImperativeHandle(u,()=>({show:()=>w(!0),hide:()=>C()}),[C]),n.createElement(n.Fragment,null,le,h&&n.createElement(me.Window,{key:q,autoFocus:!1,title:c.toLanguageString(r.toolbarAI,r.messages[r.toolbarAI]),initialTop:Y,initialLeft:J,initialWidth:q,style:{height:"auto",minWidth:"90px",minHeight:"50px"},onClose:C,resizable:!0,draggable:!0,className:"k-grid-assistant-window",maximizeButton:be},ie))});j.displayName="KendoReactGridToolbarAIAssistant";exports.GridToolbarAIAssistant=j;